我有一个包含id, Name列的表。
当选择I want to group by on Name列(但不显示所有记录的摘要),并将结果计数一个分组中的最大数目显示为一个分组的最小数目时。
SELECT Table1.id, Table1.name
FROM Table1
GROUP BY Table1.id, Table1.name;这是表格:

我的想法是:

但我得到的结果是:

发布于 2020-07-31 13:38:05
一种方法使用对子查询的连接,该子查询查找每个名称的计数:
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;发布于 2020-07-31 14:04:30
当您按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发布于 2020-07-31 19:28:11
哦,我明白了。您可以在order by中使用子查询
select t.*
from t
order by (select count(*) from t t2 where t2.name = t.name) desc, name;请注意,name是第二个order by密钥。如果两个名称具有相同的计数,则这会将给定名称的所有行放在一起。
https://stackoverflow.com/questions/63186183
复制相似问题