问题描述
我需要基于SELECT
并同时使用ORDER BY
的列GROUP BY
。
例如,我有以下数据:
id | type | value | priority
- A 1 100
- A 2 0
- B 3 0
- B 4 100
我需要GROUP BY type
,SELECT 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 BY
和LIMIT
的很好的解决方案。
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