如何仅针对符合某些标准的组与其他组进行比较,对分组结果集进行过滤?例如,只有那些拥有最大组成记录数的组?
我曾经认为如下的子查询应该可以解决问题:
SELECT * FROM (
SELECT *, COUNT(*) AS Records
FROM T
GROUP BY X
) t HAVING Records = MAX(Records);
Run Code Online (Sandbox Code Playgroud)
然而,最后一个HAVING条款的添加导致一个空的记录集......发生了什么?
对于您给出的确切问题,一种看待它的方法是您希望记录组中没有其他组拥有更多记录。所以如果你说
SELECT taxid, COUNT(*) as howMany
GROUP by taxid
Run Code Online (Sandbox Code Playgroud)
您可以获得所有县及其计数
然后,您可以通过将其设为子查询来将该表达式视为表,并为其指定别名。下面我为查询分配了两个“副本”,名称为 X 和 Y,并要求一张表中没有更多的出租车。如果有两个数字相同,我会得到两个或更多。不同的数据库有专有的语法,特别是 TOP 和 LIMIT,这使得这种查询更简单、更容易理解。
SELECT taxid FROM
(select taxid, count(*) as HowMany from flats
GROUP by taxid) as X
WHERE NOT EXISTS
(
SELECT * from
(
SELECT taxid, count(*) as HowMany FROM
flats
GROUP by taxid
) AS Y
WHERE Y.howmany > X.howmany
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4740 次 |
| 最近记录: |