如何从启用ONLY_FULL_GROUP_BY的聚合中获取其他列?

时间:2017-05-25 11:35:24

标签: mysql sql group-by aggregate

任务是为每个s_stunde获取s_tag的最大值。很容易:

SELECT s_tag, max(s_stunde) AS letzte_stunde
FROM tstundenplan
GROUP BY s_tag;

工作得很好。

+-------+---------------+
| s_tag | letzte_stunde |
+-------+---------------+
|     1 |            16 |
|     2 |            16 |
|     3 |            16 |
|     4 |            16 |
|     5 |            16 |
|     6 |             7 |
+-------+---------------+

但我希望从聚合letzte_stunde字段的行中获取其他列。禁用ONLY_FULL_GROUP_BY后,我的结果如下所示:

+-------+----------+----------+---------------+
| s_tag | s_lehrer | s_klasse | letzte_stunde |
+-------+----------+----------+---------------+
|     1 | FM       | 4AHIF    |            16 |
|     2 | PUH      | 2BHIF    |            16 |
|     3 | PUH      | 2BHIF    |            16 |
|     4 | NAI      | 5AHIF    |            16 |
|     5 | PUH      | 2BHIF    |            16 |
|     6 | AT       | 1AHKUI   |             7 |
+-------+----------+----------+---------------+

我确实看到了ONLY_FULL_GROUP_BY修复的逻辑问题(因为可能有多个列与聚合值相匹配),但是实现相同的最佳方法是什么启用规则的结果?

现在我知道我可以使用any_value明确地告诉它使用任何匹配的值(在我的情况下只能是一个),但它有点像黑客。

您可能会说这是How to make group by work by specifying a single column name in GROUP BY with ONLY_FULL_GROUP_BY enabled的副本,但是在主键上处理了聚合,这不是这里的情况。

SQL Select only rows with Max Value on a Column无法解答我的问题,因为它没有处理ONLY_FULL_GROUP_BY

我希望尽快得到答案 - 谢谢!

0 个答案:

没有答案