【发布时间】:2019-01-25 16:10:08
【问题描述】:
我有这张桌子
ID user test
-----------------
1 john aaaaa
2 john aaaaa
3 john bbbbb
4 john NULL
5 john ddddd
6 sonya NULL
7 sonya cccccc
8 sonya dddddd
9 sonya aaaaaa
我需要编写一个查询来为每个用户提取 test 的第一个非空值
如果我做一个分组
SELECT
user,
test,
FROM table
GROUP BY user
我得到了这个结果集
user test
-----------------
john aaaaa
sonya NULL
但是索尼娅有一个空值,我想得到这个:
user test
-----------------
john aaaaa
sonya cccccc
现在,我知道有一些方法可以从 group by 中获取 sum、count、max、min 等,但我想知道是否有任何方法可以获取第一个非 null 值
有人可以帮忙吗?
【问题讨论】:
-
GROUP BY没有任何聚合是没有意义的。在大多数 SQL 实现中,您的代码都是非法的。 -
试试
MIN(test):) -
使用
WHERE IS NOT NULL删除 NULL,您将得到“TOP N 行”任务,该任务通常在 SO 和 Web 上广泛记录。 -
如果没有对行排序的规范,确定哪个值是“第一个”的概念没有任何意义。我们可以很容易地使用聚合函数优先考虑非 NULL 值,例如MIN(test) 或 MAX(test) 都将在 NULL 值之前返回非 NULL 值。如果我们需要按
id列排序的给定用户的行,那就是另一个蜡球......
标签: mysql group-by null extract