MySQL中group by后获取第一个非空值

MySQL中group by后获取第一个非空值

在MySQL中,当我们使用group by对数据进行分组统计时,有时候需要在每组中获取第一个非空值。下面就来介绍一种实现方法。

假设我们有一个表格students,其中有两个字段namescore。现在我们需要按照name字段进行分组,然后获取每组中第一个非空的score值。

CREATE TABLE students (
  name VARCHAR(20),
  score INT
);

INSERT INTO students VALUES 
('Tom', NULL),
('Tom', 85),
('Tom', 90),
('Mary', NULL),
('Mary', 92);

首先,我们需要使用内部查询来获取每组中第一个非空的score值。具体实现方法是,在内部查询中对每组按照name排序,然后在每个组中选择第一个非空的score值:

SELECT name, 
  (SELECT score FROM students s2 
   WHERE s1.name = s2.name AND score IS NOT NULL 
   ORDER BY score LIMIT 1) AS first_score
FROM students s1
GROUP BY name;

上面的代码首先使用FROM students s1对原始表格进行查询,然后使用内部查询(SELECT score FROM students s2)获取每组中第一个非空的score值,内部查询中的WHERE条件筛选出和当前组名称相同的记录,并且保证score是非空的,ORDER BYscore进行排序,LIMIT 1则选择排序后的第一个记录。

最后使用GROUP BY name对结果进行分组。

上面的代码输出结果如下:

+------+-------------+
| name | first_score |
+------+-------------+
| Mary |          92 |
| Tom  |          85 |
+------+-------------+

可以看到,输出结果正确,各组中都只输出了第一个非空的score值。

阅读更多:MySQL 教程

总结

在MySQL中,通过内部查询的方式可以方便地获取每组中第一个非空的值。具体实现方法是,在内部查询中对组内数据进行排序,然后选择排序后的第一个非空值。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程