Mysql通过获取另一列值的值基进行分组
我有一个长查询返回,如下表所示Mysql通过获取另一列值的值基进行分组,mysql,sql,mariadb,Mysql,Sql,Mariadb,我有一个长查询返回,如下表所示 item_Id name value priority 1 department A F 1 department B T 1 zone 12 F 1 area Africa F 2 department A F 2
item_Id name value priority
1 department A F
1 department B T
1 zone 12 F
1 area Africa F
2 department A F
2 zone 12 F
2 area Africa F
2 area Europe T
我可以使用分组方式来实现以下结果吗
item_id name value
1 department B
1 zone 12
1 area Africa
2 department A
2 zone 12
2 area Europe
基本上,我想对
名称
进行分组,该值基于优先级,而不加入查询本身行数
在这里提供了一个选项:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY item_Id, name ORDER BY priority DESC) rn
FROM yourTable
)
SELECT
item_Id,
name,
value
FROM cte
WHERE rn = 1;
这里的策略是为每个项目/部门记录组(可能是一个或两个记录)分配一个行号序列值。除非不存在,否则将为真实优先级记录分配一个序列值1,在这种情况下,将为优先级错误记录分配1。
行号
在此处提供了一个选项:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY item_Id, name ORDER BY priority DESC) rn
FROM yourTable
)
SELECT
item_Id,
name,
value
FROM cte
WHERE rn = 1;
这里的策略是为每个项目/部门记录组(可能是一个或两个记录)分配一个行号序列值。除非不存在,否则将为真实优先级记录分配一个序列值1,在这种情况下,将为优先级错误记录分配1。您可以使用row_number()
您可以使用row_number()
我可以使用分组方式来实现以下结果吗
是的,您可以使用分组依据
:
select item_id, name,
coalesce(max(case when priority = 'T' then value end),
max(value)
) as value
from t
group by item_id, name;
还有其他方式来表达逻辑<代码>行编号()就是其中之一。作为相关子查询:
select t.*
from t
where priority = 'T' or
not exists (select 1
from t t2
where t2.item_id = t.item_id and
t2.name = t.name and
t2.priority = 'T'
);
我可以使用分组方式来实现以下结果吗
是的,您可以使用分组依据
:
select item_id, name,
coalesce(max(case when priority = 'T' then value end),
max(value)
) as value
from t
group by item_id, name;
还有其他方式来表达逻辑<代码>行编号()就是其中之一。作为相关子查询:
select t.*
from t
where priority = 'T' or
not exists (select 1
from t t2
where t2.item_id = t.item_id and
t2.name = t.name and
t2.priority = 'T'
);
在优先级列中T和F表示什么?是真/假在优先级列中T和F表示什么?是真/假