那么,是否可以使用具有这样的条款?

问题描述 投票:0回答:2

如果我组通过的属性的关系,然后我做:

GROUP BY a

HAVING count(a) < max(a)

这是这样做的正确方法? (我需要出现在比max的Do的关系少的)

sql
2个回答
0
投票

那么,语法,这是正确的。但它不会做你想要的。该max(a)是计算最大a的价值 - 它无关计数。

如果你关心伯爵,我会建议窗口功能:

select x.*
from (select a, count(*) as cnt, . . .,
             rank() over (order by count(*) desc) as seqnum
      from . . .
      group by a
     ) x
where seqnum > 1;

这也可以用having条款来实现:

select a, count(*) as cnt, . . .
from . . .
group by a
having count(*) < (select count(*)
                   from . . .
                   group by a
                   order by count(*) desc
                   fetch first 1 row only
                  );

这两个查询使用ISO / ANSI标准语法,因为你的问题没有一个数据库标签。


0
投票

不,它不是(根据你的,你需要什么样的描述)。

有是在执行GROUP BY后使用子集的方式。

伯爵似乎无关......你所提供的标准将创建一个桶每一个值,并且将返回水桶其中在它的项目数量较少,则该值。因此,在你的榜样,如果有一个包含值1,1,2,行,你执行SELECT a FROM ... GROUP BY a WHERE COUNT(a) < MAX(a)结果将是2(因为1出现了两次,等于2,而不是更小)。

你可能想使用子选择你所描述的:

SELECT ... FROM ... WHERE a < (SELECT MAX(a) FROM ...)

然而,你的描述是不特定的,所以我希望它帮助。

© www.soinside.com 2019 - 2024. All rights reserved.