SQL:仅使用count查找最小聚合
我正在将DB2用于一个项目,并希望在不使用min特性的情况下找到成员最少的组。我的想法是找到所有的组,然后从其他组中减去任何有更多成员的组,这样我就得到了一个没有比任何其他组更多成员的组,即min 到目前为止我有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.
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;