表countries 数据如下:
| name | continent |
|---|---|
| Jane | America |
| Pascal | Europe |
| Xi | Asia |
| Jack | America |
| 数据建表来源: SQL试题使得每个学生 按照姓名的字⺟顺序依次排列 在对应的⼤洲下⾯ | |
| 展示为如下的数据样式: |
| name | continent |
|---|---|
| Jane, Jack | America |
| Xi | Asia |
| Pascal | Pascal |
解决SQL:
SELECT GROUP_CONCAT(name ORDER BY name SEPARATOR ', ') AS names,'America' AS continent
FROM countries
WHERE continent = 'America'
UNION ALL
SELECT GROUP_CONCAT(name ORDER BY name SEPARATOR ', '),'Asia'
FROM countries
WHERE continent = 'Asia'
UNION ALL
SELECT GROUP_CONCAT(name ORDER BY name SEPARATOR ', '),'Europe'
FROM countries
WHERE continent = 'Europe';
展示结果

--详细注释:
-- 选择所有洲为'America'的国家名称,并使用GROUP_CONCAT函数将它们合并为一个字符串,以逗号分隔,并按名称排序
-- 将结果作为一个名为'names'的列,并添加一个名为'continent'的列,其值为'America'
SELECT GROUP_CONCAT(name ORDER BY name SEPARATOR ', ') AS names, 'America' AS continent
-- 从表'countries'中选择数据
FROM countries
-- 只包括洲为'America'的行
WHERE continent = 'America'-- 将上述结果与下面的结果合并-- 选择所有洲为'Asia'的国家名称,并使用GROUP_CONCAT函数将它们合并为一个字符串,以逗号分隔,并按名称排序
-- 将结果作为一个名为'names'的列,并添加一个名为'continent'的列,其值为'Asia'
UNION ALL
SELECT GROUP_CONCAT(name ORDER BY name SEPARATOR ', '), 'Asia'
FROM countries
WHERE continent = 'Asia'-- 将上述结果与下面的结果合并-- 选择所有洲为'Europe'的国家名称,并使用GROUP_CONCAT函数将它们合并为一个字符串,以逗号分隔,并按名称排序
-- 将结果作为一个名为'names'的列,并添加一个名为'continent'的列,其值为'Europe'
UNION ALL
SELECT GROUP_CONCAT(name ORDER BY name SEPARATOR ', '), 'Europe'
FROM countries
WHERE continent = 'Europe';