MySQL如何选择group by中的第一个非空值
我有这张桌子MySQL如何选择group by中的第一个非空值,mysql,group-by,null,extract,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的第一个非空值 如果我做一个小组 SELECT
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
但是sonya有一个空值,我想得到:
user test
-----------------
john aaaaa
sonya cccccc
现在,我知道有一些方法可以从group by中获取SUMME、count、max、min等,但我想知道是否有任何方法可以获取第一个非空值
有人能帮忙吗?试试这个查询
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
)
您可以在子查询中使用内部联接来按用户划分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
分组依据
没有任何聚合是没有意义的。在大多数SQL实现中,您的代码都是非法的。请尝试使用MIN(test)
:)删除WHERE NOT NULL
中的空值,这样您就只剩下SO和Web上广泛记录的“TOP N rows”任务。如果没有对行排序的规范,确定哪个值是“first”的概念没有任何意义。我们可以很容易地使用聚合函数优先选择非NULL值,例如,MIN(test)或MAX(test)都将在NULL值之前返回非NULL值。如果我们需要按id
column排序的给定用户的行,那么这是一个不同的蜡球。。。