gpt4 book ai didi

mysql - 根据MySQL中的多列获取最大行

转载 作者:太空宇宙 更新时间:2023-11-03 11:23:46 24 4
gpt4 key购买 nike

我有一个看起来像这样的表:

id | title | value | language
---+-------+-------+---------
1 | a | 1800 | NULL
2 | a | 1900 | NULL
3 | b | 1700 | NULL
4 | b | 1750 | NULL
5 | b | 1790 | 1
6 | c | 1892 | NULL
7 | c | 1900 | 1
8 | c | 1910 | 2
9 | d | 3020 | NULL

想要得到如下结果:

id | title | value | language
---+-------+-------+---------
2 | a | 1900 | NULL
4 | b | 1750 | NULL
5 | b | 1790 | 1
6 | c | 1892 | NULL
7 | c | 1900 | 1
8 | c | 1910 | 2
9 | d | 3020 | NULL

重点是在每种标题的每种语言的值列中选择最大值 - 最大的是最新的。其次,想避免像 MAX、DISTINCT 或 GROUP-BY 这样的聚合函数,因为我正在使用 MERGE 算法构建 MySQL View ,并且不想最终创建一个临时表(参见 https://dev.mysql.com/doc/refman/5.6/en/view-algorithms.html 的底部部分) .

到目前为止这是有效的,但只返回每个标题的最大行:

SELECT t1.title
FROM table t1
LEFT OUTER JOIN table t2
ON t1.title = t2.title
AND t1.value < t2.value
WHERE t2.title IS NULL

我怎样才能创建一个像上面的结果那样考虑语言的结果?谢谢。

最佳答案

你可以用 NOT EXISTS 来做到这一点:

select t.*
from tablename t
where not exists (
select 1 from tablename
where
title = t.title and
coalesce(language, 0) = coalesce(t.language, 0) and
value > t.value
)

参见 demo .
结果:

| id  | title | value | language |
| --- | ----- | ----- | -------- |
| 2 | a | 1900 | NULL |
| 4 | b | 1750 | NULL |
| 5 | b | 1790 | 1 |
| 6 | c | 1892 | NULL |
| 7 | c | 1900 | 1 |
| 8 | c | 1910 | 2 |
| 9 | d | 3020 | NULL |

关于mysql - 根据MySQL中的多列获取最大行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56376554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com