表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';