Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite3:按具有计数的x分组(y>N)_Sqlite - Fatal编程技术网

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:你的第二个解决方案,我需要在小组之后加入,否则我会出错。