我有一个名为list_details的表
listId tier
1 5
1 5
1 6
2 4
2 5
我想要以下结果:
listId tier
1 5(2), 6(1)
2 4(1),5(1)
我尝试了以下查询:
SELECT ld.listId,count(ld.tier)
from list_details ld
group by ld.listId
它给了我:
listId tier
1 3
2 2
但是我不知道该如何放置条件或...基于等级进行分类。
任何帮助表示赞赏
谢谢迈克:
您的查询结果是:
ListId tierData
1 5(2), 6(1), 4(1),5(1)
But I want:
listId tier
1 5(2), 6(1)
2 4(1),5(1)
最佳答案
我假设您真的不需要5(2), 6(1)
格式的响应,或者如果确实需要该格式的显示,则可以在应用程序层中提供该格式。
您应该简单地添加多个分组:
SELECT
listId,
tier,
COUNT(1) AS `tierCount`
FROM list_details
GROUP BY listId, tier
ORDER BY listId ASC, tier ASC
如果需要确切的文本结果,可以执行以下操作:
SELECT
a.listID AS listID,
GROUP_CONCAT(
CONCAT(
a.tier,
'(',
a.tierCount,
')'
)
) AS tierData
FROM (
SELECT
listId,
tier,
COUNT(1) AS `tierCount`
FROM list_details
GROUP BY listId, tier
) AS a
GROUP BY listID
ORDER BY listID ASC
关于mysql - 按组按SQL进行分类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21995208/