Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql通过获取另一列值的值基进行分组_Mysql_Sql_Mariadb - Fatal编程技术网

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表示什么?是真/假