[英]MySQL Query with multiple GROUP BY - How do I make one group a column head and one group a row head in an HTML table?
該標題可能沒有意義,我不確定如何用一個句子問我要做什么...
我有一個這樣的MySQL表:
| id | user | team | month | result |
|----|-------|--------|-------|--------|
| 1 | Joe | red | sept | 100 |
| 2 | Joe | red | oct | 40 |
| 3 | Jim | red | sept | 70 |
| 4 | Jim | red | oct | 50 |
| 5 | Susy | red | sept | 40 |
| 6 | Tim | blue | sept | 60 |
| 7 | Tim | blue | oct | 100 |
| 8 | Betty | blue | sept | 70 |
| 9 | Dave | blue | sept | 20 |
| 10 | Stan | green | oct | 40 |
| 11 | Alan | green | sept | 80 |
| 12 | Tina | green | oct | 100 |
| 13 | Tina | green | sept | 30 |
| 14 | Rick | yellow | oct | 50 |
| 15 | Ellen | yellow | oct | 60 |
最終,我試圖輸出一個HTML表,該表顯示按團隊和月份組織的結果大於50的用戶總數。
這是我現在正在運行的查詢:
SELECT team, month, count(*)
FROM example
WHERE result >= 50
GROUP BY team, month
哪個返回:
| team | month | count(*) |
|--------|-------|----------|
| blue | oct | 1 |
| blue | sept | 2 |
| green | oct | 1 |
| green | sept | 1 |
| red | oct | 1 |
| red | sept | 2 |
| yellow | oct | 2 |
但是在我的HTML表中,我想以列的形式列出月份(並添加總計列)。 因此,這樣呈現的HTML表(忽略排序,它是任意的):
| Team | sept | oct | Total |
|--------|------|-----|-------|
| red | 2 | 1 | 3 |
| blue | 2 | 1 | 3 |
| green | 1 | 1 | 2 |
| yellow | 0 | 2 | 2 |
我可以使用已有的查詢結果,並以某種方式將其處理為PHP / HTML的最終格式嗎? 還是我首先需要更改查詢方式?
*編輯以更改HTML表輸出示例-我希望這是動態的,以便將更多的月份添加到原始表中,結果HTML表可以水平擴展。
您需要的基本SQL是:
SELECT Team,
COUNT(CASE WHEN Month = 'Sept' THEN 1 END) AS Sept,
COUNT(CASE WHEN Month = 'Oct' THEN 1 END) AS oct,
COUNT(*) AS Total
FROM T
GROUP BY Team;
如果您不知道所需的列數,則需要使用准備好的語句動態地進行操作。
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT(
'COUNT(CASE WHEN Month = ''',
Month,
''' THEN 1 END) AS ',
Month
)
)
INTO @sql
FROM T;
SET @sql = CONCAT('SELECT Team, ', @sql, ', COUNT(*) AS Total FROM T GROUP BY Team');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.