もっと効率的な方法や集計を必要としない方法があるかもしれませんが、これを行うべきだと思います。
:当初、私はこの要件を誤解していました。 COUNT()
にMAX()
集計を変更:
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
は、固定された箱の数ですか? –
はい。 3つのボックスと3つのレベルのみ。ありがとう。 – user889349