【问题标题】:Keep the order while grouping in T-SQL在 T-SQL 中分组时保持顺序
【发布时间】:2016-02-09 18:55:53
【问题描述】:

我在 MSSQL 中有下表和数据(例如简化)。

---------
|id|Data|
---------
|1 |XOO |
|2 |OXO |
|3 |OOX |
|4 |XOO |
|5 |OXO |
|6 |OOX |
|7 |XXX |
|8 |OOO |

(数据行 1、2、3 在 4、5、6 处再次重复。7 和 8 再次是唯一的。 我想使用 count 和 group by 检索以下内容:

------------ (desired result)
|Count|Data|
------------
|2    |XOO |
|2    |OXO |
|2    |OOX |
|1    |XXX |
|1    |OOO |

顺序(id)非常重要。当我运行以下查询时,我可以获得计数值,但顺序似乎混乱。

SELECT  COUNT ([Data]) AS Count, [Data]
FROM [MyTable]  GROUP BY [Data] 

------------ (incorrect result with wrong order)
|Count|Data|
------------
|2    |XOO |
|1    |OOO |
|2    |OOX |
|1    |OXO |
|1    |XXX |

这与查询或表结构有关?

【问题讨论】:

  • 将 min(id) 添加到您的选择和使用它的订单中
  • 确实.. 看起来就这么简单。谢谢!我可以选择这个作为答案吗?
  • @JamesZ 您可以通过表达式进行排序,而无需在您的SELECT 中。

标签: sql sql-server tsql group-by sql-order-by


【解决方案1】:

您可以按最小id订购:

SELECT COUNT([Data]) AS Count, [Data]
FROM [MyTable]
GROUP BY [Data] 
ORDER BY MIN(ID);

【讨论】:

    【解决方案2】:

    你快到了,你只需要像这样ORDER BY Count DESC,[Data] DESC

    SELECT  COUNT ([Data]) AS Count, [Data]
    FROM [MyTable]  
    GROUP BY [Data] 
    ORDER BY Count DESC,[Data] DESC
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-30
      • 2016-05-23
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多