sql - 如何将 "group by"与三列数据一起使用?

标签 sql mysql

我目前的查询是:

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/

相关文章:

MySQL 多对多的完整组合可能性

MySQL 检查空白或空值

sql - ORACLE中的 sleep 功能

sql - 为 oracle 创建 View 时出现语法错误

mysql - 如何不重复派生表的子查询

MySQL - 拆分字段并将结果插入到列中

php - 为每个查询使用不同的按钮更改 SQL 查询?

mysql - 如何定义top-3评级?

sql - 如何将 SQL 查询的数组输出传递给 PostgreSQL (PL/pgSQL) 函数?

php - 如何使用php在下一页中显示与点击元素相关的信息