如果我组通过的属性的关系,然后我做:
GROUP BY a
HAVING count(a) < max(a)
这是这样做的正确方法? (我需要出现在比max的Do的关系少的)
那么,语法,这是正确的。但它不会做你想要的。该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标准语法,因为你的问题没有一个数据库标签。
不,它不是(根据你的,你需要什么样的描述)。
有是在执行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 ...)
然而,你的描述是不特定的,所以我希望它帮助。