如果您知道 的数量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;