gpt4 book ai didi

mysql - 有聚合函数为什么还要把其余的列写到GROUP BY中呢?

转载 作者:行者123 更新时间:2023-11-30 22:18:09 25 4
gpt4 key购买 nike

我有这个表结构:

// mytable
+----+------+-------+-------------+
| id | type | score | unix_time |
+----+------+-------+-------------+
| 1 | 1 | 5 | 1463508841 |
| 2 | 1 | 10 | 1463508842 |
| 3 | 2 | 5 | 1463508843 |
| 4 | 1 | 5 | 1463508844 |
| 5 | 2 | 15 | 1463508845 |
| 6 | 1 | 10 | 1463508846 |
+----+------+-------+-------------+

这是我的查询:

SELECT SUM(score), unix_time
FROM mytable
WHERE 1
GROUP BY type

这是输出:

+-------+-------------+
| score | unix_time |
+-------+-------------+
| 30 | 1463508841 |
| 20 | 1463508843 |
+-------+-------------+

Ok,一切都很好.. 只是有一件事:专业人士建议我将unix_time 写入GROUP BY。他们认为这样做是分组和聚合功能的基础。

那么,为什么我真的应该在 GROUP BY 中写入一个(几乎) 唯一列?如果我这样做,那么每一行将是一个单独的组,并且会有很多额外的无用行:

+-------+-------------+
| score | unix_time |
+-------+-------------+
| 30 | 1463508841 |
| 30 | 1463508842 |
| 20 | 1463508843 |
| 30 | 1463508844 |
| 20 | 1463508845 |
| 30 | 1463508846 |
+-------+-------------+

看到了吗?有很多额外的行。那么为什么这样做是标准的事情呢?为什么每个人都告诉我 MySQL 不这样做也能工作,但没有其他数据库不能..我真的不明白为什么我应该这样做..!

请有人帮我说清楚并解释一下 GROUP BY 是如何工作的?这和我的理解不一样吗?

最佳答案

GROUP BY 子句中没有 unix_time 是一种非标准的 MySQL hack,我会完全远离它。 unix_type 的值在具有相同类型的所有行中完全不同。你怎么知道应该出现哪个 unix_time

在您的示例中,您似乎非常满意每组使用完全任意的 unix_time 值。

然而,这是灾难的根源。从一组中选择一些完全任意的值甚至意味着什么?如果 unix_times 按天、周甚至年展开怎么办?那你会选择哪一个?

专业人士告诉您将其放在 group by 子句中的原因是为了使结果有意义!另一种方法是将 unix_time 完全排除在选择之外,因为不应该依赖您得到的结果。

关于mysql - 有聚合函数为什么还要把其余的列写到GROUP BY中呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37534694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com