の数がわかっている場合degree
、これは静的クエリを使用して実行できます。
SELECT Name,
SUM(CASE WHEN degree = 11 THEN 1 ELSE 0 END) `degree 11`,
SUM(CASE WHEN degree = 12 THEN 1 ELSE 0 END) `degree 12`,
SUM(CASE WHEN degree = 13 THEN 1 ELSE 0 END) `degree 13`
FROM tableName
GROUP BY Name
出力
╔════════╦═══════════╦═══════════╦═══════════╗
║ NAME ║ DEGREE 11 ║ DEGREE 12 ║ DEGREE 13 ║
╠════════╬═══════════╬═══════════╬═══════════╣
║ Adam ║ 2 ║ 1 ║ 0 ║
║ Beny ║ 1 ║ 0 ║ 1 ║
║ Charly ║ 0 ║ 1 ║ 0 ║
╚════════╩═══════════╩═══════════╩═══════════╝
それ以外の場合、学位の数が不明な場合は、動的クエリを作成することをお勧めします。
SELECT GROUP_CONCAT(DISTINCT
CONCAT('SUM(CASE WHEN degree = ',
degree,
' THEN 1 ELSE 0 END) AS ',
CONCAT('`degree ', degree, '`')
)) INTO @sql
FROM Tablename;
SET @sql = CONCAT('SELECT Name, ', @sql, '
FROM tableName
GROUP BY Name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;