我有一個MySQL表:簡單的表格。很難要求
level box
1 1
2 2
3 2
1 3
2 1
2 3
2 3
3 1
我怎樣才能得到這個表與MySQL查詢?
box1 box2 box3
level1 1 0 1
level2 1 1 2
level3 1 1 0
我有一張大桌子,所以請求應該很快。 謝謝。
我有一個MySQL表:簡單的表格。很難要求
level box
1 1
2 2
3 2
1 3
2 1
2 3
2 3
3 1
我怎樣才能得到這個表與MySQL查詢?
box1 box2 box3
level1 1 0 1
level2 1 1 2
level3 1 1 0
我有一張大桌子,所以請求應該很快。 謝謝。
我認爲這應該做到這一點,雖然可能有更有效的方法或不需要聚合。
編輯:最初我誤解了要求。改變了MAX()
骨料COUNT()
:
SELECT
CONCAT('level', level) AS levelname,
COUNT(CASE WHEN box = 1 THEN box ELSE NULL END) AS box1,
COUNT(CASE WHEN box = 2 THEN box ELSE NULL END) AS box2,
COUNT(CASE WHEN box = 3 THEN box ELSE NULL END) AS box3
FROM tbl
GROUP BY levelname
使用JOIN
是另一個方法:
SELECT
CONCAT('level', a.level) AS levelname,
b1.num AS box1,
b2.num AS box2,
b3.num AS box3
FROM
table a
LEFT JOIN (SELECT level, COUNT(*) AS num FROM table WHERE box = 1) b1 ON a.level = b1.level
LEFT JOIN (SELECT level, COUNT(*) AS num FROM table WHERE box = 2) b2 ON a.level = b2.level
LEFT JOIN (SELECT level, COUNT(*) AS num FROM table WHERE box = 3) b3 ON a.level = b3.level
你不想要COUNT(),而不是MAX()? – CAbbott 2012-03-07 19:53:32
@CAbbott如果沒有重複,則無關緊要。但是,如果存在模糊(因爲它出現在示例數據中),則SUM()將返回不同的結果集。例如,等級2的方框3的值由'SUM()'爲6,但由'MAX()'爲3。 – 2012-03-07 19:54:46
@CAbbott其實,我誤解了需求 - 它應該是'COUNT()'。 – 2012-03-07 19:56:39
固定的箱數? – 2012-03-07 19:47:42
是的。只有3盒和3個等級。謝謝。 – user889349 2012-03-07 19:49:06