如何比较一列的值? SQL(Postgres)
How to compare the values of one column? SQL(Postgres)
Postgres
我有 table user_answers:
----------------------------
| id | user_id | answer_id |
----------------------------
| 1 | 47 | 121 |
----------------------------
| 2 | 47 | 125 |
----------------------------
| 3 | 47 | 141 |
----------------------------
| 4 | 49 | 122 |
----------------------------
| 5 | 49 | 121 |
----------------------------
| 6 | 49 | 101 |
----------------------------
| 7 | 52 | 121 |
----------------------------
| 8 | 52 | 125 |
----------------------------
| 9 | 52 | 101 |
----------------------------
| 10 | 67 | 101 |
----------------------------
我想得到 user_id,只有 user_id 其中 answer_id = 121 和 answer_id = 125。
好成绩:47和52
因为:
user_id = 49有121,没有125
这个简单的查询不起作用(returns 没有):
SELECT user_id FROM user_answers
WHERE answer_id = 121 AND answer_id = 125
select user_id
from user_answers
where answer_id in (121, 125)
group by user_id
having count(*) = 2
您的查询 return 没有任何内容,因为 answer_id
在任何给定行上只有一个值。行中不能有多个值。
这是一个集内集查询的例子。我建议使用 group by
和 having
。这是一种方法:
SELECT user_id
FROM user_answers
WHERE answer_id IN (121, 125)
GROPU BY user_id
HAVING COUNT(DISTINCT answer_id) = 2;
这将 return 具有 121、125 和其他值的值。仅获取这两个值:
SELECT user_id
FROM user_answers
WHERE answer_id IN (121, 125)
GROPU BY user_id
HAVING SUM(CASE wHEN answer_id = 121 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE wHEN answer_id = 125 THEN 1 ELSE 0 END) > 0;
你需要 Or,而不是 And。
SELECT user_id FROM user_answers WHERE (answer_id = 121 OR answer_id = 125)
您的原始查询正在查找 answer_id 同时为 121 和 125 的结果。使用 OR 查找 answer_id 是任一值的结果。
Postgres
我有 table user_answers:
----------------------------
| id | user_id | answer_id |
----------------------------
| 1 | 47 | 121 |
----------------------------
| 2 | 47 | 125 |
----------------------------
| 3 | 47 | 141 |
----------------------------
| 4 | 49 | 122 |
----------------------------
| 5 | 49 | 121 |
----------------------------
| 6 | 49 | 101 |
----------------------------
| 7 | 52 | 121 |
----------------------------
| 8 | 52 | 125 |
----------------------------
| 9 | 52 | 101 |
----------------------------
| 10 | 67 | 101 |
----------------------------
我想得到 user_id,只有 user_id 其中 answer_id = 121 和 answer_id = 125。
好成绩:47和52 因为: user_id = 49有121,没有125
这个简单的查询不起作用(returns 没有):
SELECT user_id FROM user_answers
WHERE answer_id = 121 AND answer_id = 125
select user_id
from user_answers
where answer_id in (121, 125)
group by user_id
having count(*) = 2
您的查询 return 没有任何内容,因为 answer_id
在任何给定行上只有一个值。行中不能有多个值。
这是一个集内集查询的例子。我建议使用 group by
和 having
。这是一种方法:
SELECT user_id
FROM user_answers
WHERE answer_id IN (121, 125)
GROPU BY user_id
HAVING COUNT(DISTINCT answer_id) = 2;
这将 return 具有 121、125 和其他值的值。仅获取这两个值:
SELECT user_id
FROM user_answers
WHERE answer_id IN (121, 125)
GROPU BY user_id
HAVING SUM(CASE wHEN answer_id = 121 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE wHEN answer_id = 125 THEN 1 ELSE 0 END) > 0;
你需要 Or,而不是 And。
SELECT user_id FROM user_answers WHERE (answer_id = 121 OR answer_id = 125)
您的原始查询正在查找 answer_id 同时为 121 和 125 的结果。使用 OR 查找 answer_id 是任一值的结果。