group by

作者: 酸甜柠檬26 | 来源:发表于2019-10-29 22:16 被阅读0次

    where后不能接聚合函数,having后面可以接
    聚合函数就用来输入多个数据,输出一个数据的
    常用聚合函数:avg/count/max/min/sum

    出现在select后面的单独的列,必须出现在group by子句中作为分组列
    即:
    没有出现在group by后面的分组列,不能被select后面单独选出来,必须用聚合函数将其取出。
    比如,如下表所示:

    image.png
    不能够这样写:select * from Table group by name,一定不能是*,select后只能是某一个列(该列只能是group by后的name)或者某个列(其他列)的聚合函数。
    一旦数据被group by name之后,所有的数据都会被分组,如下所示
    image.png
    在group by name以后,得到上面的虚拟表3,如果此时进行select * ,则只会取出每组name中靠前的那个id,数据不准确。
    要想取出正确的想要的数据,可以对id列或者number列进行聚合函数(聚合函数会对每组name中的数据在进行一次分组聚合,取出相应的max或者min或者count)
    对一列进行分组和对多列进行分组都是一样的情况 group by name,number
    image.png
    select后除了单独的列name,number可以接以外,要接其他的列必须用聚合函数来接。
    参考自:https://blog.csdn.net/intmainhhh/article/details/80777582
    以上思路在case when then else end句型中,仍然受用。
    case when 实现行转列时要用max()或者其他聚合函数
    https://blog.csdn.net/u014180504/article/details/79150492
    进行group by分组以后,有些组内可能会有多个数据,如果不进行组内聚合函数,则会默认取出第一条记录,此时可能就会发生错误。

    相关文章

      网友评论

          本文标题:group by

          本文链接:https://www.haomeiwen.com/subject/kregvctx.html