我当前的查询是:

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/

10-10 06:20