gpt4 book ai didi

mysql - 将表行转换为 mysql 中的列

转载 作者:行者123 更新时间:2023-11-29 03:51:18 26 4
gpt4 key购买 nike

假设我有一个类似于以下的数据库:

表student_info:

id    name
111 jon
112 dan
113 david
...

和表分数:

item_id    student_id    score
01 111 37
02 111 45
01 112 55
02 112 44
01 113 66
02 113 45
...

是否可以通过 mysql 查询生成下表?:

Student_Name  ITEM_1_SCORE  ITEM_2_SCORE
jon 37 45
dan 55 44
david 66 45
...

如果是这样,语法是什么?不知道这是join操作还是别的?

谢谢。

最佳答案

如果 item_id 只有两个值,那么可以硬编码值。示例

SELECT  a.Name AS Student_Name,
MAX(CASE WHEN item_id = '01' THEN b.score END) Item_1_Score,
MAX(CASE WHEN item_id = '02' THEN b.score END) Item_2_Score
FROM student_info a
LEFT JOIN scores b
ON a.id = b.student_ID
GROUP BY a.Name

否则,当您有未知数量的分数时,动态 SQL 是首选。

SELECT  GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN item_id = ''',
item_id,
''' THEN Score END) AS ',
CONCAT('`Item_', item_id, '_Score`')
)) INTO @sql
FROM scores;

SET @sql = CONCAT('SELECT a.Name AS Student_Name, ', @sql, '
FROM student_info a
LEFT JOIN scores b
ON a.id = b.student_ID
GROUP BY a.Name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

两个查询将输出相同的内容

╔══════════════╦══════════════╦══════════════╗
║ STUDENT_NAME ║ ITEM_1_SCORE ║ ITEM_2_SCORE ║
╠══════════════╬══════════════╬══════════════╣
║ dan ║ 55 ║ 44 ║
║ david ║ 66 ║ 45 ║
║ jon ║ 37 ║ 45 ║
╚══════════════╩══════════════╩══════════════╝

关于mysql - 将表行转换为 mysql 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16619474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com