在 T-SQL 中分组时保持顺序
Keep the order while grouping in T-SQL
我在 MSSQL 中有以下 table 数据(例如简化)。
---------
|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 |
这与查询或 table 结构有关吗?
您可以通过最小id来订购:
SELECT COUNT([Data]) AS Count, [Data]
FROM [MyTable]
GROUP BY [Data]
ORDER BY MIN(ID);
你快到了,你只需要像这样ORDER BY Count DESC,[Data] DESC
:
SELECT COUNT ([Data]) AS Count, [Data]
FROM [MyTable]
GROUP BY [Data]
ORDER BY Count DESC,[Data] DESC
结果:
我在 MSSQL 中有以下 table 数据(例如简化)。
---------
|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 |
这与查询或 table 结构有关吗?
您可以通过最小id来订购:
SELECT COUNT([Data]) AS Count, [Data]
FROM [MyTable]
GROUP BY [Data]
ORDER BY MIN(ID);
你快到了,你只需要像这样ORDER BY Count DESC,[Data] DESC
:
SELECT COUNT ([Data]) AS Count, [Data]
FROM [MyTable]
GROUP BY [Data]
ORDER BY Count DESC,[Data] DESC
结果: