我目前的查询是:
SELECT x, MAX(z) AS mz, y FROM my_table GROUP BY x
列 x 和 mz 按预期返回,但最后一列 y 与其他两列不匹配。换句话说,我希望“y”列与 mz 列匹配,就像 x 列当前所做的那样。我该如何做到这一点?
更新:抱歉,问题不是很清楚。我想执行以下查询:
SELECT * FROM (SELECT x, MAX(z) AS mz FROM my_table GROUP BY x) a RIGHT JOIN (SELECT y, MAX(z) AS mz FROM my_table GROUP BY y) b ON a.mz = b.mz
无需使用 3 个 SELECT 语句(也许这没什么大不了的,但对我来说这似乎是一个低效的查询。但我在 sql 查询方面还很陌生,所以我不知道。)
更新#2:假设我的 table 看起来像这样:
-------------------
| x | y | z |
-------------------
| 45 | h | 3 |
| 23 | c | 5 |
| 45 | e | 9 |
| 23 | b | 12 |
| 45 | x | 36 |
| 33 | s | 44 |
| 33 | p | 78 |
-------------------
我要返回以下内容:
-------------------
| x | y | z |
-------------------
| 23 | b | 12 |
| 45 | x | 36 |
| 33 | p | 78 |
-------------------
最佳答案
你可以做
select s.x, s.mz, stuff.y
from (select x, max(z) as mz from stuff group by x) s
left join stuff on stuff.x = s.x and stuff.z = s.mz;
关于sql - 如何将 "group by"与三列数据一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2072679/