You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中按国家分组筛选表格并将各年龄设为独立列(复杂需求)

需求实现方案

这个需求完全可以实现,属于SQL中的**行转列(Pivot)**操作,下面分两种场景给出具体实现方法:

一、年龄值固定且已知的场景

如果数据里的年龄是固定的几个值(比如预期结果里的18、20、22岁),可以用CASE WHEN结合GROUP BY来实现:

SELECT 
    country,
    MAX(CASE WHEN age = 18 THEN name END) AS "18岁",
    MAX(CASE WHEN age = 20 THEN name END) AS "20岁",
    MAX(CASE WHEN age = 22 THEN name END) AS "22岁"
FROM myTable
GROUP BY country;
  • GROUP BY country实现按国家分组
  • CASE WHEN匹配对应年龄,提取该年龄下的姓名
  • MAX()函数用于过滤每组中的NULL值,保留对应年龄的有效姓名

二、年龄值不固定(可能新增)的场景

如果年龄是动态变化的,无法提前写死所有年龄值,可以用动态SQL自动生成列:
以MySQL为例,步骤如下:

  1. 先获取所有唯一的年龄,拼接成行转列的SQL片段:
SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(CASE WHEN age = ', age, ' THEN name END) AS "', age, '岁"')) INTO @pivot_cols FROM myTable;
  1. 拼接完整查询语句并执行:
SET @sql = CONCAT('SELECT country, ', @pivot_cols, ' FROM myTable GROUP BY country;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

你之前用的SELECT DISTINCT country FROM myTable只是单独提取不重复的国家,这只是行转列需求中的一个环节,核心还是通过分组+条件判断来生成对应年龄的独立列。

内容的提问来源于stack exchange,提问作者John C.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:39:20