我当前的查询是:
SELECT x, MAX(z) AS mz, y FROM my_table GROUP BY x
x和mz列按预期返回,但最后一列y与其他两列不匹配。换句话说,我希望“y”列与mz列匹配,就像x列当前一样。我该怎么做?
更新:抱歉,问题不是很清楚。我要执行以下查询:
从中选择*作为
mz来自my_table GROUP BY x)a右侧
连接(选择y,MAX(z)作为mz FROM
a.mz上按y)b分组的my_table GROUP=
b.mz公司
不需要使用3个SELECT语句(也许这不是什么大问题,但对我来说这似乎是一个低效的查询。但我对sql查询还很陌生,所以我不知道。)
更新2:假设我的表是这样的:
-------------------
| 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 - 如何对三列数据使用“分组依据”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2072679/