我想生成一个查询,如果表中存在 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/