MySQL如何选择分组依据中的第一个非空值

时间:2019-01-25 16:10:09

标签: mysql group-by null extract

我有这张桌子

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的第一个非null值

如果我进行分组

SELECT
    user,
    test,
FROM table
GROUP BY user

我获得了这个结果集

user    test
-----------------
john    aaaaa
sonya   NULL

但是sonya的值为空,我想获得这个值:

user    test
-----------------
john    aaaaa
sonya   cccccc

现在,我知道有一些方法可以从分组依据中获取总和,计数,最大值,最小值等,但是我想知道是否有任何方法可以获取第一个非空值

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

尝试此查询

select id, user, test
from T
where id in (
     select min(id) 
     from T as tin 
     where tin.user = T.user and tin.test is not null 
     group by tin.user
  )

答案 1 :(得分:0)

您可以对用户的min(id)(第一行)组的子查询使用内部联接

  select m.id, m.user, m.test
  from my_table m
  INNER JOIN (
       select user, min(id) as min_id
       from my_table 
       where test is not null 
       group by user
  ) t on t.uset = m.user and t.min_id = m.id