zoukankan      html  css  js  c++  java
  • group by 注意的细节 ,

    1. GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前. HAVING语句必须在ORDER BY子句之后。(where先执行,再groupby分组;groupby先分组,having在执行。)

    select T_NAME , T_ADDRESS ,min(rowid)      5                                         
    from xuesheng               1 

    where   T_AGE >20       2                 

    group by  T_NAME, T_PHONE,T_AGE, T_ADDRESS        3
    having count(*) > 1)          4

    红色数字是执行顺序:

    2. 除了聚集函数外, SELECT语句中的每个列都必须在GROUP BY子句中给出。count()为聚集函数,T_NAME, T_PHONE,T_BIRTHDAY, T_ADDRESS 在后面groupby中有,所以select后面可有可不有。

    (a)正确的:

    select T_NAME , T_ADDRESS ,min(rowid)                             ---select语句中的列
    from xuesheng
    group by T_NAME, T_PHONE,T_BIRTHDAY, T_ADDRESS   ---GROUP BY子句中
    having count(*) > 1) 

    (b) T_PHONE ,在select 语句中存在,而在group by中不存在,所以会报错。

    select T_NAME , T_ADDRESS ,min(rowid)  ,T_PHONE                      ---select语句中的列
    from xuesheng
    group by T_NAME, T_BIRTHDAY, T_ADDRESS                                    ---GROUP BY子句中
    having count(*) > 1) 

    3. having 作用的对象是分组出来的对象的相关聚合函数进行的筛选。

  • 相关阅读:
    SqlServer:创建索引
    SqlServer:使用视图 View
    SqlServer:修改和删除数据
    网络管理:SNMPv1
    《剑指 Offer》学习记录:题 9:用两个栈实现队列
    《剑指 Offer》学习记录:题 27:二叉树的镜像
    团队冲刺9
    团队冲刺8
    团队冲刺7
    团队冲刺6
  • 原文地址:https://www.cnblogs.com/brianlai/p/10313106.html
Copyright © 2011-2022 走看看