您的位置:首页 > 数据库

SQL查询连接实例(二)

2008-03-22 17:44 288 查看
create table inventory
  (
  item varchar(10),
  color varchar(10),
  quantity int--库存表
  )
  insert into inventory select 'table','blue',124
   union select 'table','red',223
   union select 'table','red',211
   union select 'chair','blue',101
   union select 'chair','red',210
  /*group by,order by*/
  select item,color,sum(quantity) as qu from inventory group by item,color order by item desc
  --只有item和color相同的行才能分在一个组中
  
  /*with CUBE*/
  select item,color,sum(quantity) as qu from inventory group by item,color with CUBE order by item desc
  --CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。
  --扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。
  --CUBE 运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。
  --GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。
  
  /*with ROLLUP*/
  select item,color,sum(quantity) as qu from inventory group by item,color with ROLLUP order by item desc
  --CUBE和ROLLUP的区别在于:
  --CUBE生成的结果集显示了所选列中值的所有组合的聚合
  --ROLLUP生成的结果集显示了所选列中值的某一层次的聚合
  --ROLLUP层次结构列语句中列的顺序由select中的列名列表顺序决定
  
  /*计算列*/
  create table emp
  (
  eid int primary key,
  joinyear int,--工龄
  sal money,--年薪
  allsal as sal*joinyear --总收入=工龄×年薪
  )
  --不需要给计算列提供值
  insert into emp(eid,joinyear,sal) values (1,5,10000)
  select * from emp
  
  /*COMPUTE*/
  select item,color,quantity from inventory order by quantity COMPUTE sum(quantity),count(item)
  --此语句有两个结果集是包含选择列表信息的所有明细行
  --第二个结果集只有一行,其中包含COMPUTE子句中指定的聚合函数的合计
  --多个聚合函数由逗号分割
  --COMPUTE语句中order by子句为可选
  
  /*COMPUTE by*/
  select item,color,quantity from inventory order by item COMPUTE sum(quantity) by item
  --当COMPUTE带有可选的BY子句时,符合select条件的每个组都有两个结果集
  --每个组的第一个结果集是明细行集,其中包含该组的选择列表信息
  --每个组的第二个结果集有一行,包含该组的COMPUTE子句中所指定的聚合函数小计
  --必须先排序,后计算
  --依据列表与排序依据列表匹配
  --order by子句必选
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: