比较SQL组与彼此

egg*_*yal 5 sql group-by

如何仅针对符合某些标准的组与其他组进行比较,对分组结果集进行过滤?例如,只有那些拥有最大组成记录数的组?

我曾经认为如下的子查询应该可以解决问题:

SELECT * FROM (
    SELECT   *, COUNT(*) AS Records
    FROM     T
    GROUP BY X
) t HAVING Records = MAX(Records);
Run Code Online (Sandbox Code Playgroud)

然而,最后一个HAVING条款的添加导致一个空的记录集......发生了什么?

Lev*_*der 1

对于您给出的确切问题,一种看待它的方法是您希望记录组中没有其他组拥有更多记录。所以如果你说

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)