显示sql group by中的最大到最小计数

idv4meu8  于 2021-07-27  发布在  Java
关注(0)|答案(3)|浏览(338)

我有一张table id, Name 柱。
当选择我想 group byName 列(但不显示所有记录的摘要),并显示结果计数一个分组中的最大数目到一个分组的最小数目。

SELECT Table1.id, Table1.name
FROM Table1
GROUP BY Table1.id, Table1.name;

这是一张table:

我的想法:

但我得到的结果是:

pokxtpni

pokxtpni1#

一种方法是使用子查询的联接来查找每个名称的计数:

SELECT a.name, a.ID
FROM Table1 AS a
INNER JOIN
(
    SELECT name, COUNT(*) AS cnt
    FROM Table1
    GROUP BY name
) AS b
    ON a.name = b.name
ORDER BY
    b.cnt DESC,
    a.ID;
qpgpyjmq

qpgpyjmq2#

按id分组时,会为每个元素创建一个单独的组,因为每个元素都有一个唯一的id。若要获取每个名称组的计数,需要按名称创建一个分组,然后将其与原始表联接,以便保留值。比如:

WITH Counts (name, cnt) AS
       (SELECT name, COUNT(*)
          FROM Table1
         GROUP BY name)
SELECT Table1.id, Table1.name
  FROM Table1, Counts
       INNER JOIN Counts
       ON Table1.name = Counts.name
 ORDER BY Counts.cnt DESC
xoefb8l8

xoefb8l83#

哦,我明白了。您可以在 order by :

select t.*
from t
order by (select count(*) from t t2 where t2.name = t.name) desc, name;

请注意 name 是第二个吗 order by 钥匙。如果两个名称具有相同的计数,则这会将给定名称的所有行保持在一起。

相关问题