Sql 获取嵌套的select权限时出现问题

Sql 获取嵌套的select权限时出现问题,sql,postgresql,select,Sql,Postgresql,Select,我想生成一个查询,在表中存在一条或多条记录的情况下,一列给我一个true/false。以下是三个表和所需的输出: 表1:用户 ID | NAME | CREATE_DATE 1 | Chris | 01.01.2017 2 | Mark | 05.02.2017 表2:条目 ID | USER_ID | ENTRY_CONTENT 1 | 1 | "Some string" 2 | 1 | "Another string" 3

我想生成一个查询,在表中存在一条或多条记录的情况下,一列给我一个true/false。以下是三个表和所需的输出:

表1:用户

ID | NAME  | CREATE_DATE  
1  | Chris | 01.01.2017   
2  | Mark  | 05.02.2017  
表2:条目

ID | USER_ID | ENTRY_CONTENT  
1  |    1    | "Some string"   
2  |    1    | "Another string"  
3  |    2    | "something something dark side"  
表3:费率

ID1 | ID2 | WINNER  
1   |  2  |  1
表RATE中的ID1和ID2是来自条目的ID。想象一下,我向您展示了一对用户创建的条目,并询问他们哪一个更好。他们的选择存储在“winner”中

我的查询应提供以下信息:

USER ID | Amount of entries | RATINGS Y/N  
对于每个用户,我都希望看到他们的ID、他们输入了多少条目,以及他们是否进行了任何评分

因此,在上述情况下:

USER ID | Amount of entries | RATINGS Y/N  
1       |     2             |  1  
2       |     1             |  0
代码如下:

SELECT    u.id, 
          ( 
                 SELECT Count(*) AS count 
                 FROM   entry 
                 WHERE  ( entry.user_id = u.id)
          ) AS "Amount of entries", 
          EXISTS 
          ( 
                 SELECT id1 
                 FROM   rate r 
                 WHERE  r.id1=e.id 
                 AND    e.id=u.id) AS "Ratings Y/N" 
FROM      "user" u 
LEFT JOIN entry e on u.id=e.user_id 
GROUP BY  u.id
我得到以下错误:
错误:子查询使用外部查询中未分组的列e.id 第5行。。。速率r中的ID1,其中r.ID1=e.id和e


我是一个初学者,没有找到任何解决这个问题的方法。如果能提供一个解决方案,并简要解释它失败的原因,以及我应该研究哪些概念,我将不胜感激。谢谢。

不清楚您如何定义评级Y/N,因为不确定ID1和ID2是什么,也不确定优胜者的结果。所以这个计算只是一个客人。测试它的最佳方法是执行相同的查询来测试没有聚合的联接,并检查结果集是否正确

我使用user\u id、entry\u id作为连接字段来清楚地说明这一点。如果连接不是您想要的,那么应该很容易修复

SELECT u.user_id,
       COUNT( e.user_id ) as total_entries,
       MAX( CASE WHEN r.winner IS NULL 
                 THEN 0
                 ELSE 1
            END) as RATINGS
FROM users u
LEFT JOIN entries e
  ON u.user_id = e.user_id
LEFT JOIN rates r
  ON e.entry_id = r.entry_id1
  OR e.entry_id = r.entry_id2
GROUP BY u.user_id

ID
命名字段
entry\u ID
user\u ID
相比,这种方式更容易找到相关表格。您的计数不正确,但这不是问题所在。马克斯最终确实完成了工作。你能给我解释一下原因吗?我不确定,因为我没有数据。但是,因为您正在执行左联接,所以您可能有数据或
NULL
,因此
MAX()
将为您提供更大的结果,如果没有数据,则为NULL。谢谢。现在来看,很容易理解。