基于优先级列表的列选择元素的聚合
Aggregation with column selecting element based on list of priorities
我想汇总一个元素列表,其中一栏是紧急情况。我想为每个项目获取一行,并根据列表(或映射)获取对该项目观察到的最高“紧急度”。
Item
Urgency
A
Normal
A
Low
A
High
B
Normal
B
Low
C
High
预期输出:
Item
Urgency
A
High
B
Normal
C
High
这个想法就像聚合做一个“max()”,但由于紧迫性不是数字,我需要某种映射。
有办法一步完成吗?
另一种方法是创建一个带有 case when 子句的 CTE,以将每个紧急值映射到一个整数。但如果可能的话,我宁愿不做那个额外的步骤。
您可以使用 max_by
通过 Item
聚合分组和 case
语句将紧急程度映射到数值:
-- sample data
WITH dataset (Item, Urgency) AS (
VALUES ('A', 'Normal'),
('A', 'Low'),
('A', 'High'),
('B', 'Normal'),
('B', 'Low'),
('C', 'High')
)
-- query
select Item,
max_by(
Urgency,
case
Urgency
when 'Low' then 1
when 'Normal' then 2
when 'High' then 3
end
) Urgency
from dataset
group by Item
order by Item
输出:
Item
Urgency
A
High
B
Normal
C
High
我想汇总一个元素列表,其中一栏是紧急情况。我想为每个项目获取一行,并根据列表(或映射)获取对该项目观察到的最高“紧急度”。
Item | Urgency |
---|---|
A | Normal |
A | Low |
A | High |
B | Normal |
B | Low |
C | High |
预期输出:
Item | Urgency |
---|---|
A | High |
B | Normal |
C | High |
这个想法就像聚合做一个“max()”,但由于紧迫性不是数字,我需要某种映射。
有办法一步完成吗?
另一种方法是创建一个带有 case when 子句的 CTE,以将每个紧急值映射到一个整数。但如果可能的话,我宁愿不做那个额外的步骤。
您可以使用 max_by
通过 Item
聚合分组和 case
语句将紧急程度映射到数值:
-- sample data
WITH dataset (Item, Urgency) AS (
VALUES ('A', 'Normal'),
('A', 'Low'),
('A', 'High'),
('B', 'Normal'),
('B', 'Low'),
('C', 'High')
)
-- query
select Item,
max_by(
Urgency,
case
Urgency
when 'Low' then 1
when 'Normal' then 2
when 'High' then 3
end
) Urgency
from dataset
group by Item
order by Item
输出:
Item | Urgency |
---|---|
A | High |
B | Normal |
C | High |