簡體   English   中英

按groupby-SQL進行分類

[英]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

等等

您想同時對listidtier進行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM