按分组按-SQL分类

时间:2014-02-24 17:52:27

标签: mysql sql

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

但我不知道如何根据等级对条件或......进行分类。

感谢任何帮助

谢谢Mike:

您的查询结果是:

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)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

SELECT ld.listId, ld.tier, count(ld.tier) 
FROM list_details ld 
GROUP by ld.listId, ld.tier;

将屈服:

list_id tier count
1  5  2
1  6  1

答案 2 :(得分:0)

您想要GROUP BY listidtier

SELECT 
    ld.listId,
    ld.tier,
    count(ld.tier)
FROM list_details ld
GROUP BY ld.listId, ld.tier

这将导致:

listId    tier    count
1         5       2
1         6       1
2         4       1
2         5       1

这不是你想要的输出100%,但它很接近。要获得所需的输出,需要一些时髦的SQL,或者在UI中显示结果。