【问题标题】:SQL Select top frequent recordsSQL 选择最频繁的记录
【发布时间】:2009-12-18 07:25:58
【问题描述】:

我有下表:

Table
+----+------+-------+
| ID | Name | Group |
+----+------+-------+
| 0  |   a  |   1   | 
| 1  |   a  |   1   | 
| 2  |   a  |   2   |
| 3  |   a  |   1   |
| 4  |   b  |   1   |
| 5  |   b  |   2   |
| 6  |   b  |   1   |
| 7  |   c  |   2   |
| 8  |   c  |   2   |
| 9  |   c  |   1   |
+----+------+-------+

我想从特定组中选择前 20 个不同的名称,按该组中最常见的名称排序。此示例的组 1 的结果将返回 a b c ( a - 3 次出现,b - 2 次出现,c - 1 次出现)。

谢谢。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:
    SELECT TOP(20) [Name], Count(*) FROM Table
    WHERE [Group] = 1
    GROUP BY [Name]
    ORDER BY Count(*) DESC
    

    【讨论】:

    • 结果名称会不同吗?
    【解决方案2】:
    SELECT Top(20) 
       name, group, count(*) as occurences
    FROM yourtable
    GROUP BY name, group
    ORDER BY count(*) desc
    

    【讨论】:

    • 您可能需要在 ORDER BY 上添加 DESC。他想要最频繁的,而不是最不频繁的。
    【解决方案3】:
    SELECT
        TOP 20
        Name,
        Group,
        COUNT(1) Count,
    FROM
        MyTable
    GROUP BY
        Name,
        Group
    ORDER BY
        Count DESC
    

    【讨论】:

    • 这将是一个很好的视图或内部选择。你需要一个 WHERE 子句才能得到他想要的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    相关资源
    最近更新 更多