oracle中怎么按每小时分组。数据如下:

oracle中怎么按每小时分组。数据如下:,第1张

select time,count(time) from (
select substr('2014-01-01 20:03:00',1,13) as time from table_name) group by time;

概述
今天主要分享下Oracle数据库分组函数group by 、 rollup、cude、grouping 、grouping sets的常用用法,以下以Oracle自带schema做演示。
1、group by的使用
--根据DEPTNO和JOB进行分组。求相同DEPTNO,相同JOB的员工工资总和。
SELECT EDEPTNO,EJOB,SUM(ESAL) FROM EMP E GROUP BY EDEPTNO,EJOB ORDER BY EDEPTNO;
2、group by 配合rollup的使用
rollup()--可以使用一个或者多个参数。意思是从右向左进行数据的汇总统计,并生成一行,rollup是个统计函数。
以下是根据分组情况进行统计,最终进行全部汇总。
(1)简单的使用rollup--生成一行新数据。(要生成新的一行数据,还可以使用UNION ALL)
SELECT DDUMMY FROM DUAL D GROUP BY ROLLUP(DDUMMY);
(2)先根据EDEPTNO,EJOB进行分组,然后从右向左
SELECT EDEPTNO,EJOB,SUM(ESAL) FROM EMP E GROUP BY ROLLUP(EDEPTNO,EJOB) ORDER BY EDEPTNO;
针对以上的使用ROLLUP的结果的理解:
a:首先根据GROUP BY EDEPTNO,EJOB查询出9条数据(除4,8,12,13外),在根据rollup的定义,从右向左,对ROLLUP中的参数进行小计
首先根据JOB(对所有的JOB进行汇总),汇总出4,8,12行,在根据EDEPTNO(对所有的DEPTNO进行汇总),汇总出第十三行数据。
(3) 特殊情况
SELECT EDEPTNO,EJOB,SUM(ESAL) FROM EMP E GROUP BY ROLLUP(EJOB,EDEPTNO) ORDER BY EDEPTNO;
理解:首先根据GROUP BY EDEPTNO,EJOB查询出前九条数据,其次对EDEPTNO进行汇总,但是必须考虑JOB,也就是相同的JOB,的所有的工资总和,所以出现下面五条数据。
3、group by 配合cube的使用
SELECT EDEPTNO,EJOB,SUM(ESAL) FROM EMP E GROUP BY CUBE(EDEPTNO,EJOB) ORDER BY EDEPTNO;
理解:CUBE会对条件中的每一个条件进行单独的汇总:即对单独的列进行汇总
GROUP BY CUBE(EDEPTNO,EJOB)首先根据:GROUP BY EDEPTNO,EJOB查询数据,其次对EJOB进行汇总(不考虑DEPTNO,单独汇总,而ROLLUP是在同一个DEPTNO下面)再对EDEPTNO进行汇总,最后全部汇总。
cube(a,b) 统计列包含:(a,b)、(a)、(b)、()
cube(a,b,c) 统计列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()
4、GROUPING 的使用
GROUPING函数可以接受一列,返回0或者1。如果列值为空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查询中使用。当需要在返回空值的地方显示某个值时,GROUPING()就非常有用。
SELECT GROUPING(EDEPTNO), EDEPTNO,EJOB,SUM(ESAL) FROM EMP E GROUP BY ROLLUP(EDEPTNO,EJOB) ORDER BY EDEPTNO;
可以使用decode或者case函数进行转换这种不友好的显示:
SELECT
CASE WHEN grouping(EDEPTNO) = 1
THEN '总计'
ELSE EDEPTNO || ''
END AS 部门,
CASE WHEN grouping(EJOB) = 1 AND grouping(EDEPTNO) = 0
THEN '小计'
ELSE EJOB
END AS 工作种类,
SUM(ESAL) FROM EMP E GROUP BY ROLLUP(EDEPTNO,EJOB)
ORDER BY EDEPTNO;
SELECT DECODE(GROUPING(EDEPTNO), 1, '总计', EDEPTNO) AS 部门,
CASE
WHEN GROUPING(EJOB) = 1 AND GROUPING(EDEPTNO) = 0 THEN
'小计'
ELSE
EJOB
END AS 工作种类,
SUM(ESAL)
FROM EMP E
GROUP BY ROLLUP(EDEPTNO, EJOB)
ORDER BY EDEPTNO;
5、grouping sets提供了指定汇总集合条件的功能
根据EDEPTNO,EJOB分别汇总数据。
SELECT EDEPTNO,EJOB,SUM(ESAL) FROM EMP E GROUP BY GROUPING SETS(EDEPTNO,EJOB);
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

select '60分以下' 级别,sum(case when grade<60 then 1 else 0 end) 人数 from score
union all
select '60分-80分' 级别,sum(case when grade between 60 and 80 then 1 else 0 end) 人数 from score
union all
select '80分以上' 级别,sum(case when grade > 80 then 1 else 0 end) 人数 from score

这样?

SELECT t1a,t1b_count,t2a_count,to_char(t1b_count/t2a_count,'FM99999000') AS BL FROM
(SELECT ta,COUNT() AS b_count FROM table1 t WHERE tb='1' GROUP BY ta) t1,
(SELECT ta,COUNT() AS a_count FROM table1 t GROUP BY ta ) t2
WHERE t1a=t2a

不用下跪,我来挽救你。
select trunc((rownum - 1)/10)+1 as groups,max(field1),min(field1),avg(field1) from y61 group by trunc((rownum - 1)/10)+1 order by groups;

select 角色roleid, 角色name, 权限mname from 角色 left join 角色权限 on 角色roleid = 角色权限roleid left join 权限 on 角色权限moduleid = 权限moduleid
替换相应的表名即可


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13217254.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-22
下一篇 2023-06-22

发表评论

登录后才能评论

评论列表(0条)

保存