搜了半天不知道搜什么关键字,请教一下各位 mysql 里面 select a,b from table group by a 这种语句,b 的取值逻辑是什么?
1
gz911122 2020-04-01 16:40:05 +08:00 1
这种 sql 在 5.6 以上是不允许的
select 的条件需要在 group by 里面,或者用 max min 之类的函数包裹起来 |
2
6260628 OP @gz911122 我的 sql 版本是 5.6 以下,之前别的同事有按这个语法写过 sql,而且关联业务逻辑,所以请告知这个取数逻辑
|
3
kr380709959 2020-04-01 16:54:04 +08:00 1
@6260628 你这个 b 是不做任何计算处理么?比如 count(b)或者是 sum(b=value)这样?
|
4
VictorJing94 2020-04-01 16:58:10 +08:00 1
你加个聚合函数吧
|
5
xuanbg 2020-04-01 17:02:59 +08:00 1
这种写法,这个 b 取到的是哪一行的 b 就是个玄学问题了……正确的写法是用 max(),min(),sum()这些函数去取出符合你预期的 b
|
6
2379920898 2020-04-01 17:22:24 +08:00 1
A 分组里面的 B,咋了?
|
7
skymei 2020-04-01 17:24:56 +08:00 1
B 应该是匹配到的第一条吧,之前研究过,忘了...
|
8
raymanr 2020-04-01 17:31:54 +08:00 2
感觉这个问题好像也没啥好研究的, 本身就是不规范的写法...
|
9
6260628 OP 最主要的是贸然加了 max 或者 min 怕会影响查询逻辑,之前写这个代码的大哥已经离职了
|
10
6260628 OP 引以为戒吧,哭了
|
11
siriussilen 2020-04-01 17:36:13 +08:00 1
取到的是每个 group 下的第一行数据
|
12
siriussilen 2020-04-01 17:37:15 +08:00 1
这个我前两天刚研究过 在 leetcode 上面的评测实验过
|
13
skymei 2020-04-01 17:37:59 +08:00 1
|
14
skymei 2020-04-01 17:39:21 +08:00 1
@skymei
官方文档里面是这么描述的 The server is free to choose any value from each group, so unless they are the same, the values chosen are nondeterministic. 值不确定 |
15
glacer 2020-04-01 17:41:04 +08:00 1
这种写法不符合 SQL 标准,属于 MySQL 引擎的自定义行为
|
16
hbolive 2020-04-01 18:34:46 +08:00 1
B 取到的值取决于对应的 A,而 A 是返回的结果是 GROUP BY 结果集中第一条数据。。
|
17
littlewing 2020-04-02 09:29:10 +08:00 via iPhone
any value,未定义行为,任何一个值都有可能,mysql 没有明确规定
|