只计算唯一的空行
Only count null rows when it's unique
我希望能够在数据有数据或者它是具有 null 的唯一记录时提取数据。没有 MAX 可以做到这一点吗?
姓名
Class
年级
约翰
数学
100
乔伊
数学
空
乔伊
科学
100
乔伊
科学
空
乔伊
科学
95
由于 Joey 只有一个 Math,它应该仍然在查询结果中。另一方面,由于 Joey 有两个科学 类,因此会过滤掉 null。
结果应该是:
姓名
Class
年级
约翰
数学
100
乔伊
数学
空
乔伊
科学
100
乔伊
科学
95
我尝试将查询放在一起,但运气不佳:
Select distinct Name, Class, Grade,
ROW_NUMBER() over (PARTITION by Name, Class order by Name asc) as RowNum
from Data
Where RowNum = 1
这是一个非常简化的查询版本,它包含 20 个不同的列,因此我想尽可能避免使用 groups 和 MAX。感谢您的帮助!谢谢。
你很接近,但需要两个重要的改变:
- 您需要一个子查询来按
row_number()
. 的结果进行过滤
- window 函数需要做您真正想要的。
我的理解是你想要所有非 NULL
成绩。或者,如果所有成绩都是 NULL
,那么 return 那些:
select Name, Class, Grade
from (Select d.*,
rank() over (partition by Name, Class
order by (case when grade is not null then 1 else 2 end)
) as seqnum
from Data d
) d
Where seqnum = 1
我希望能够在数据有数据或者它是具有 null 的唯一记录时提取数据。没有 MAX 可以做到这一点吗?
姓名 | Class | 年级 |
---|---|---|
约翰 | 数学 | 100 |
乔伊 | 数学 | 空 |
乔伊 | 科学 | 100 |
乔伊 | 科学 | 空 |
乔伊 | 科学 | 95 |
由于 Joey 只有一个 Math,它应该仍然在查询结果中。另一方面,由于 Joey 有两个科学 类,因此会过滤掉 null。
结果应该是:
姓名 | Class | 年级 |
---|---|---|
约翰 | 数学 | 100 |
乔伊 | 数学 | 空 |
乔伊 | 科学 | 100 |
乔伊 | 科学 | 95 |
我尝试将查询放在一起,但运气不佳:
Select distinct Name, Class, Grade,
ROW_NUMBER() over (PARTITION by Name, Class order by Name asc) as RowNum
from Data
Where RowNum = 1
这是一个非常简化的查询版本,它包含 20 个不同的列,因此我想尽可能避免使用 groups 和 MAX。感谢您的帮助!谢谢。
你很接近,但需要两个重要的改变:
- 您需要一个子查询来按
row_number()
. 的结果进行过滤
- window 函数需要做您真正想要的。
我的理解是你想要所有非 NULL
成绩。或者,如果所有成绩都是 NULL
,那么 return 那些:
select Name, Class, Grade
from (Select d.*,
rank() over (partition by Name, Class
order by (case when grade is not null then 1 else 2 end)
) as seqnum
from Data d
) d
Where seqnum = 1