我手头得到以下查询结果:
SELECT DISTINCT director, name
FROM Movie m
JOIN Rating ra ON m.mid = ra.mid
JOIN Reviewer re ON ra.rid = re.rid
WHERE director IS NOT NULL
ORDER BY director, name;
+------------------+------------------+
| director | name |
+------------------+------------------+
| James Cameron | Elizabeth Thomas |
| James Cameron | James Cameron |
| Robert Wise | Brittany Harris |
| Robert Wise | Chris Jackson |
| Steven Spielberg | Ashley White |
| Steven Spielberg | Brittany Harris |
| Steven Spielberg | Chris Jackson |
| Victor Fleming | Mike Anderson |
| Victor Fleming | Sarah Martinez |
+------------------+------------------+
最终我想获得一个数据透视表,其中所有董事都在一行,所有匹配的审稿人姓名都在自己的列中。就像这样:
director | name1 | name2 | name3
-----------------+------------------+-----------------+---------------+
James Cameron | Elizabeth Thomas |James Cameron | <null>
Steven Spielberg | Ashley White | Brittany Harris | Chris Jackson
.......
任何帮助将不胜感激!
最佳答案
MySQL 没有内置的数据透视功能。另外,你怎么知道正好有3个审稿人呢? SQL查询需要返回固定数量的列。
相反,您可以使用 group_concat()
将所有审阅者放在一个列表中:
SELECT m.director, GROUP_CONCAT(r.name SEPARATOR ', ') as reviewers
FROM Movie m JOIN
Rating ra
ON m.mid = ra.mid JOIN
Reviewer re
ON ra.rid = re.rid
WHERE director IS NOT NULL
GROUP BY m.director
ORDER BY director;
如果审阅者可以多次审阅一位导演,那么您需要DISTINCT
:
SELECT m.director, GROUP_CONCAT(DISTINCT r.name SEPARATOR ', ') as reviewers
关于mysql - SQL - 将组元素转换为新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49924089/