我有一个名为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)
答案 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
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中显示结果。