sql - 获得嵌套选择权的问题

标签 sql postgresql select

我想生成一个查询,如果表中存在 1 条或多条记录,其中一列会给出 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 是来自 ENTRY 的 ID。想象一下,我向您展示了用户创建的一对条目,并询问他们哪个条目更好。他们的选择存储在“winner”中

我的查询应该给我以下内容:

USER ID | Amount of entries | RATINGS Y/N  

对于每个 USER,我想查看他们的 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 LiNE 5 ... ID1 来自 RATE r where r.id1=e.id and e..

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

最佳答案

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

我用user_id, entry_id作为join field来表达清楚。如果连接不是您想要的,应该很容易修复。

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

关于sql - 获得嵌套选择权的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45942757/

相关文章:

ruby-on-rails - 远程服务器上的 Postgres 语言环境错误

postgresql - 使用 EXECUTE format( ... ) USING (param1, param2) 时没有参数 $2

database - PostgreSQL 唯一索引和字符串大小写

sqlite:数学运算不返回数字,即使单元格是 REAL

sql - 比较 NULL

sql - "Partial parsing"柠檬

PHP/MySQL计算具有相同外键的项目之间的差异

mysql - 如何从 MySQL longblob 中选择文本数据

SQL 条件选择

sql - 使用 JOIN 时如何在 MS Access 中删除?