Mysql 按GroupBySQL分类

Mysql 按GroupBySQL分类,mysql,sql,Mysql,Sql,我有一张名为list\u 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_det

我有一张名为list\u 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)
将产生:

list_id tier count
1  5  2
1  6  1

etc

您希望
根据
listid
tier
进行分组

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中显示这样的结果

我想你不会;如果您确实需要以
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
还是
sqlserver
?不可能两者都是,要想得到你想要的输出,需要知道是哪一个。谢谢迈克!但是我很确定有一种方法可以得到准确的结果;我曾经用过它!虽然不常见@user3000457是的,您可以得到准确的结果,查看更新的答案。
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