选择优先级较高的行并返回其值,按类型分组

问题描述

我需要基于SELECT并同时使用ORDER BY的列GROUP BY

例如,我有以下数据:

id | type | value | priority
-    A      1       100
-    A      2       0
-    B      3       0
-    B      4       100

我需要GROUP BY typeSELECT value考虑ORDER BY priority DESC。在这种情况下,输出将是:

type | value
A    | 1
B    | 4

当前,我可以选择MIN()报告的MAX()value值,例如:

SELECT MAX(value) ... GROUP BY type

但是它将返回错误:

type | value
A    | 2
B    | 4

我需要的是类似的东西

SELECT (value ORDER BY priority DESC) ... GROUP BY type

解决方法

我发现使用GROUP_CONCAT()支持您自己的范围ORDER BYLIMIT的很好的解决方案。

SELECT GROUP_CONCAT(value ORDER BY priority DESC LIMIT 1)
,

如果您的数据库版本为10.2+,请考虑使用诸如ROW_NUMBER()之类的解析函数,其中PARTITION BY type用于GROUP BY类型列,并从该函数中滤除等于1的返回值。 :

WITH t2 AS
(
 SELECT *,ROW_NUMBER() OVER (PARTITION BY type ORDER BY priority DESC) AS rn
   FROM t --> your original table
)   
SELECT type,value
  FROM t2
 WHERE rn = 1 

Demo

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...