我有一个具有这种结构的表users
:
id | user | offset
0 | alvin | -1
1 | alvin | -2
2 | alvin | 5
3 | alvin | 6
4 | simon | -5
5 | simon | -4
6 | theodore | -1
7 | theodore | 1
我想要一个返回不同用户名的查询,这些用户名在offset
中至少有1个正条目和至少1个否定条目。在此示例中,查询将返回“alvin”和“theodore”但不返回“simon”。
我查看过与GROUP BY
,HAVING
,COUNT()
及其组合相关的其他一些帖子,但似乎没有一个帖子能够解决这个数字的问题来自条件陈述的真实回报。特别是,我认为我误解了如何将count()
这样的聚合函数合并到WHERE
子句中(或者如果可能的话)。当我尝试类似的东西时:
SELECT user FROM users WHERE count(offset > 0) > 0;
我收到错误:misuse of aggregate function count()
(我知道这个陈述没有完全指定我想要的查询 - 这更多地表示我一直试图解决问题。)
我来自Python / Pandas心态,可能只是这种方法不能很好地转化为SQL。
任何建议都非常感谢!
答案 0 :(得分:0)
可以使用compound query:
完成此操作SELECT user
FROM users
WHERE offset > 0
UNION
SELECT user
FROM users
WHERE offset < 0;
实际上可以使用聚合函数。 但是,COUNT()会计算行;要计算其他东西,最好使用布尔表达式(返回0或1),并使用SUM():
SELECT user
FROM users
GROUP BY user
HAVING SUM(offset < 0) > 0
AND SUM(offset > 0) > 0;