V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
6260628
V2EX  ›  程序员

mysql select 的查询问题

  •  
  •   6260628 · Apr 1, 2020 · 2532 views
    This topic created in 2225 days ago, the information mentioned may be changed or developed.

    搜了半天不知道搜什么关键字,请教一下各位 mysql 里面 select a,b from table group by a 这种语句,b 的取值逻辑是什么?

    17 replies    2020-04-02 09:29:10 +08:00
    gz911122
        1
    gz911122  
       Apr 1, 2020   ❤️ 1
    这种 sql 在 5.6 以上是不允许的
    select 的条件需要在 group by 里面,或者用 max min 之类的函数包裹起来
    6260628
        2
    6260628  
    OP
       Apr 1, 2020 via iPhone
    @gz911122 我的 sql 版本是 5.6 以下,之前别的同事有按这个语法写过 sql,而且关联业务逻辑,所以请告知这个取数逻辑
    kr380709959
        3
    kr380709959  
       Apr 1, 2020   ❤️ 1
    @6260628 你这个 b 是不做任何计算处理么?比如 count(b)或者是 sum(b=value)这样?
    VictorJing94
        4
    VictorJing94  
       Apr 1, 2020   ❤️ 1
    你加个聚合函数吧
    xuanbg
        5
    xuanbg  
       Apr 1, 2020   ❤️ 1
    这种写法,这个 b 取到的是哪一行的 b 就是个玄学问题了……正确的写法是用 max(),min(),sum()这些函数去取出符合你预期的 b
    2379920898
        6
    2379920898  
       Apr 1, 2020   ❤️ 1
    A 分组里面的 B,咋了?
    skymei
        7
    skymei  
       Apr 1, 2020   ❤️ 1
    B 应该是匹配到的第一条吧,之前研究过,忘了...
    raymanr
        8
    raymanr  
       Apr 1, 2020   ❤️ 2
    感觉这个问题好像也没啥好研究的, 本身就是不规范的写法...
    6260628
        9
    6260628  
    OP
       Apr 1, 2020 via iPhone
    最主要的是贸然加了 max 或者 min 怕会影响查询逻辑,之前写这个代码的大哥已经离职了
    6260628
        10
    6260628  
    OP
       Apr 1, 2020 via iPhone
    引以为戒吧,哭了
    siriussilen
        11
    siriussilen  
       Apr 1, 2020   ❤️ 1
    取到的是每个 group 下的第一行数据
    siriussilen
        12
    siriussilen  
       Apr 1, 2020   ❤️ 1
    这个我前两天刚研究过 在 leetcode 上面的评测实验过
    skymei
        14
    skymei  
       Apr 1, 2020   ❤️ 1
    @skymei
    官方文档里面是这么描述的
    The server is free to choose any value from each group, so unless they are the same, the values chosen are nondeterministic.
    值不确定
    glacer
        15
    glacer  
       Apr 1, 2020   ❤️ 1
    这种写法不符合 SQL 标准,属于 MySQL 引擎的自定义行为
    hbolive
        16
    hbolive  
       Apr 1, 2020   ❤️ 1
    B 取到的值取决于对应的 A,而 A 是返回的结果是 GROUP BY 结果集中第一条数据。。
    littlewing
        17
    littlewing  
       Apr 2, 2020 via iPhone
    any value,未定义行为,任何一个值都有可能,mysql 没有明确规定
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4030 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 05:13 · PVG 13:13 · LAX 22:13 · JFK 01:13
    ♥ Do have faith in what you're doing.