sqlite3:按具有计数的x分组(y>N)
我有一个具有此结构的表用户:sqlite3:按具有计数的x分组(y>N),sqlite,Sqlite,我有一个具有此结构的表用户: 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 我想要一个查询,返回不同的用户名,这些用户名在偏移量中至少有一个正条目和一个负条目。在本例中,查询将返回a
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
我想要一个查询,返回不同的用户名,这些用户名在偏移量中至少有一个正条目和一个负条目。在本例中,查询将返回alvin和theodore,但不返回simon
我看过许多其他与GROUPBY、HAVING、COUNT及其组合相关的帖子,但它们似乎都没有提到计算条件语句的真实返回数的想法。特别是,我认为我误解了如何将诸如count之类的聚合函数合并到WHERE子句中,或者如果可能的话。当我尝试类似于:
SELECT user FROM users WHERE count(offset > 0) > 0;
我得到一个错误:滥用聚合函数计数
我知道那个语句并没有完全指定我想要的查询——它的意思更多的是表明我是如何试图解决这个问题的
我来自Python/Pandas的思维模式,可能只是这种方法不能很好地转换为SQL
非常感谢任何建议 这可以通过以下方法完成:
实际上,可以使用聚合函数。
但是,COUNT计算行数;要计算其他值,最好使用返回0或1的布尔表达式,并求和:
SELECT user
FROM users
GROUP BY user
HAVING SUM(offset < 0) > 0
AND SUM(offset > 0) > 0;
这可以通过以下方式实现:
实际上,可以使用聚合函数。
但是,COUNT计算行数;要计算其他值,最好使用返回0或1的布尔表达式,并求和:
SELECT user
FROM users
GROUP BY user
HAVING SUM(offset < 0) > 0
AND SUM(offset > 0) > 0;
谢谢你,效果很好!Re:你的第二个解决方案是,我需要在小组结束后进行分组,否则我会出错。谢谢你,效果很好!Re:你的第二个解决方案,我需要在小组之后加入,否则我会出错。