[英]categorize by groupby-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
但我不知道該如何放置條件或...基於等級進行分類。
任何幫助表示贊賞
謝謝邁克:
您的查詢結果是:
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
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
等等
您想同時對listid
和tier
進行GROUP BY
。
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,或在用戶界面中顯示類似的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.