我有一个名为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/

10-09 00:45