簡體   English   中英

具有多個GROUP BY的MySQL查詢-如何在HTML表格中將一組設為列頭,一組設為行頭?

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

SQL小提琴示例

如果您不知道所需的列數,則需要使用准備好的語句動態地進行操作。

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;

SQL小提琴示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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