在 GROUP BY 后获取第一个非空值的 MySQL 语句
在MySQL中,GROUP BY语句可以将结果集按照指定的列进行分组。如果其中有一列存在NULL值,那么在分组后会出现问题。这时需要获取每个分组的第一个非NULL值。我们可以通过以下方法来实现。
- 使用子查询和LIMIT
SELECT
id,
(
SELECT column
FROM my_table t2
WHERE t1.id = t2.id AND column IS NOT NULL
ORDER BY t2.time ASC
LIMIT 1
) AS first_value
FROM my_table t1
GROUP BY id;
- 使用GROUP_CONCAT和SUBSTRING_INDEX
SELECT
id,
SUBSTRING_INDEX(GROUP_CONCAT(column ORDER BY time ASC SEPARATOR ';'), ';', 1) AS first_value
FROM my_table
WHERE column IS NOT NULL
GROUP BY id;
阅读更多:MySQL 教程
总结
以上方法分别使用了子查询和字符串函数,可以根据实际情况选择使用。在使用GROUP BY分组时,要注意列存在NULL值的情况,可以使用函数解决问题。