oracle SQL语句笔记

来源:互联网 发布:用java编写小游戏视频 编辑:程序博客网 时间:2024/05/16 03:14

1. 看例子

select day, duan, sum(amount) as sumamount from (select to_char(time,'yyyy-mm-dd') as day,(case
         when (to_char(time, 'hh24:mi:ss') <
              '12:00:00') then
          '上午'
        when (to_char(time, 'hh24:mi:ss') >
              '12:00:00') then
          '下午'
       end) as duan,amount
  from dh_mealrecord) group by cube(day,duan) order by day

这个SQL语句是统计每天上午和下午各自的营业额。

1.1select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面,比如duan

1.2Group by子句不能使用别名,要使用别名可以外加一层select

1.3case when之间可以空着,可以为(case when then end)的结果取别名,case when语句在from的前面,case when中间没有逗号、分号之类的。

1.4从timestamp中提取时间可以用to_char(time, 'hh24:mi:ss')

1.5sum(amout)不能放在内层select中,因为内层select没有分组,oracle如何知道怎么求和。

1.6having是对结果进行筛选,where是对原始数据筛选

1.7having后同样不能跟别名,如上,不能使用sumamount

1.8groupby的rollup,可以自动计算合计,比如group by rollup(duan),oracle自动多出一条上午和下午的营业额之和,不过rollup只能用一列,如果合计多列的话,用cube

0 0
原创粉丝点击