zoukankan      html  css  js  c++  java
  • TSQL compute与聚集函数的注意细节

    compute 和 compute by 子句

    select 工号,姓名,职务,基本工资,部门编号
    from 员工
    compute count(工号) as 员工总数,avg(基本工资)

    提示错误:消息 156,级别 15,状态 1,第 3 行
    关键字 'as' 附近有语法错误。

    解释:改子句中属性不能取别名,系统会自动分配cnt,avg作为列名

    where中不可以使用聚集函数,当然也不可以使用聚集后的字段的别名

    select 商品.商品编号,商品名
    from 商品 join 销售明细 on 商品.商品编号=销售明细.商品编号
    where sum(金额)>10000
    group by 商品.商品编号,商品名

    错误提示:聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。

    解释:where子句中不能用聚集函数作为条件表达式

    如果改成:select 商品.商品编号,商品名,sum(金额) as 销售总额
    from 商品 join 销售明细 on 商品.商品编号=销售明细.商品编号
    where 销售总额>10000
    group by 商品.商品编号,商品名

    则提示错误:列名 '销售总额' 无效。

    这里需要探讨 SQL Select语句完整的执行顺序: 

    1、from子句组装来自不同数据源的数据;
    2、where子句基于指定的条件对记录行进行筛选;
    3、group by子句将数据划分为多个分组;
    4、使用聚集函数进行计算;
    5、使用having子句筛选分组,通常会使用到聚集函数;
    6、计算所有的表达式;
    7、select 的字段;
    8、使用order by对结果集进行排序,可以使用聚集函数。

    SQL语言不同于其他编程语言的最明显特征是处理代码的顺序。在大多数据库语言中,代码按编码顺序被处理。但在SQL语句中,第一个被处理的子句式FROM,而不是第一出现的SELECT。SQL查询处理的步骤序号:

      (1)  FROM <left_table>  

      (3) <join_type> JOIN <right_table> 

      (2) ON <join_condition> 

      (4) WHERE <where_condition> 

      (5) GROUP BY <group_by_list> 

      (6) WITH {CUBE | ROLLUP} 

      (7) HAVING <having_condition> 

      (8) SELECT 

      (9) DISTINCT    

      (9) ORDER BY <order_by_list>

      (10) <TOP_specification> <select_list>

    所以在执行where子句时,‘销售总额’还未计算。

     ③ HAVING子句可以使用(且常常使用聚集函数),但是不可以引用聚集后的别名

    select 部门编号,count(*) 人数
    from 员工
    group by 部门编号
    having 人数>3

     提示错误:消息 207,级别 16,状态 1,第 4 行  列名 '人数' 无效。

    正确写法:将别名“人数”改成count(*)即可

    ④ order by子句后面可以使用聚集函数,且可以使用聚集函数的别名

    select 部门编号,count(*) 人数
    from 员工
    group by 部门编号
    order by 人数

    这个可以正确显示查询结果,如果把人数改为count(*),当然也是对的。

  • 相关阅读:
    邻接矩阵有向图的介绍
    Oracle库Delete删除千万以上普通堆表数据的方法
    Oracle 11g静默安装软件+手工创建数据库
    Oracle基础维护02-表、主键、索引、表结构维护手册
    批处理:Windows主机通过FTP下载远程Linux主机上文件
    Vertica license导入最佳实践
    各类数据库问题描述模板
    Oracle同义词+dblink的实际应用
    Oracle数据逻辑迁移综合实战篇
    Greenplum 数据库安装部署(生产环境)
  • 原文地址:https://www.cnblogs.com/beyourself/p/2802849.html
Copyright © 2011-2022 走看看