Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
SQL:仅使用count查找最小聚合_Sql_Group By_Db2_Sql Order By - Fatal编程技术网

SQL:仅使用count查找最小聚合

SQL:仅使用count查找最小聚合,sql,group-by,db2,sql-order-by,Sql,Group By,Db2,Sql Order By,我正在将DB2用于一个项目,并希望在不使用min特性的情况下找到成员最少的组。我的想法是找到所有的组,然后从其他组中减去任何有更多成员的组,这样我就得到了一个没有比任何其他组更多成员的组,即min 到目前为止我有 SELECT DISTINCT P.group as Group, count(P.id) as Count FROM People P EXCEPT SELECT P.group, count(P.id) FROM People P, People O WHERE count(P.

我正在将DB2用于一个项目,并希望在不使用min特性的情况下找到成员最少的组。我的想法是找到所有的组,然后从其他组中减去任何有更多成员的组,这样我就得到了一个没有比任何其他组更多成员的组,即min

到目前为止我有

SELECT DISTINCT P.group as Group, count(P.id) as Count
FROM People P
EXCEPT
SELECT P.group, count(P.id) 
FROM People P, People O
WHERE count(P.cid) > count(O.cid);
为像这样的人提供了一个模式

create table People (
    group  varchar(25)  not null,
    id   smallint     not null,
);
我得到以下错误:

SQL0119N以SELECT子句中指定的CLUB开头的表达式, GROUP BY子句或GROUP BY子句中未指定HAVING子句或ORDER BY子句 它位于SELECT子句、HAVING子句或带列的ORDER BY子句中 函数,并且未指定GROUPBY子句。SQLSTATE=42803

如果你能帮我指出我做错了什么,或者这样一个查询的正确格式,我将不胜感激

查找成员最少的组

您可以按组聚合、按成员计数排序,并且只能获取最上面的行:

select p.group as grp, count(*) as cnt
from people p
group by p.group
order by count(*)
fetch first 1 rows only

你应该尽量直接使用min。从您的错误消息中,您的HAVING子句似乎是错误的,因此它将对此进行调查。

谢谢!这确实可能是一种更好的方法:我只是想知道如何才能在这种类型的查询中使用EXCEPT功能?@baed:mm,EXCEPT看起来不适合此任务。最关键的事情是按订单/先取-except帮不上忙。感谢您的关注,我最终能够让它与except一起工作,但它非常臃肿lol:第一个俱乐部,算作SELECT M.Club,countM.cid,Member as M GROUP by M.Club,second Club,算作SELECT M.Club,按M.club将M.cid从成员作为M组计数选择F.club作为俱乐部,F.count作为第一个F的计数,选择F.club除外,F.count从第一个F开始,第二个S,其中F.count>S.count;