首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >显示SQL分组中的最大计数到最小计数

显示SQL分组中的最大计数到最小计数
EN

Stack Overflow用户
提问于 2020-07-31 13:20:56
回答 3查看 113关注 0票数 0

我有一个包含id, Name列的表。

当选择I want to group by on Name列(但不显示所有记录的摘要),并将结果计数一个分组中的最大数目显示为一个分组的最小数目时。

代码语言:javascript
复制
SELECT Table1.id, Table1.name
FROM Table1
GROUP BY Table1.id, Table1.name;

这是表格:

我的想法是:

但我得到的结果是:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-31 13:38:05

一种方法使用对子查询的连接,该子查询查找每个名称的计数:

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2020-07-31 14:04:30

当您按ID分组时,您将为每个元素创建一个单独的组,因为每个元素都有一个唯一的ID。要获取每个名称组的计数,您需要按名称创建一个分组,然后将其与原始表联接,以便保留这些值。类似于:

代码语言:javascript
复制
  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
票数 0
EN

Stack Overflow用户

发布于 2020-07-31 19:28:11

哦,我明白了。您可以在order by中使用子查询

代码语言:javascript
复制
select t.*
from t
order by (select count(*) from t t2 where t2.name = t.name) desc, name;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63186183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档