sql的分组统计与group by 日期的处理

原创 2015年07月27日 03:47:01


近几天补oracle的sql知识,这块记录下sql的分组统计

1.简单的分组统计

创建STUDENT表:

  CREATE TABLE STUDENT(
	"NAME" VARCHAR2(10 BYTE), 
	"MAJOR" VARCHAR2(10 BYTE), 
	"SCORE" NUMBER(5,2), 
	"SEX" VARCHAR2(3 BYTE)
   );


录入数据:

Insert into STUDENT (ID,NAME,MAJOR,SCORE,SEX) values (1,'邱君','语文',70,'女');
Insert into STUDENT (ID,NAME,MAJOR,SCORE,SEX) values (2,'小狗','语文',76,'男');
Insert into STUDENT (ID,NAME,MAJOR,SCORE,SEX) values (3,'混蛋','语文',60,'男');
Insert into STUDENT (ID,NAME,MAJOR,SCORE,SEX) values (4,'邱君','数学',81,'女');
Insert into STUDENT (ID,NAME,MAJOR,SCORE,SEX) values (5,'混蛋','数学',90,'男');
Insert into STUDENT (ID,NAME,MAJOR,SCORE,SEX) values (6,'小狗','数学',77,'男');
Insert into STUDENT (ID,NAME,MAJOR,SCORE,SEX) values (7,'邱君','外语',98,'女');
Insert into STUDENT (ID,NAME,MAJOR,SCORE,SEX) values (8,'小狗','外语',71,'男');
Insert into STUDENT (ID,NAME,MAJOR,SCORE,SEX) values (9,'混蛋','外语',88,'男');

查询语句(查找出有两科分数大于80,并且平均平均成绩大于80的同学):

SELECT name,  
              SUM(CASE WHEN major = '数学' THEN score ELSE 0 END)数学 ,
              SUM(CASE WHEN major = '外语' THEN score ELSE 0 END)外语 ,
              SUM(CASE WHEN major = '语文' THEN score ELSE 0 END)语文, 
              AVG(score)
              FROM 
              student 
              GROUP BY NAME 
              HAVING 
              AVG(score) > 80 
              AND 
              SUM(CASE WHEN score > 80 THEN 1 ELSE 0 END) >= 2;

查询结果:

 


2.group by 日期的处理:

select to_char(dt,'yyyy-mm-dd'),
      SUM(case when re='胜' then 1 else 0 end)胜,
      sum(case when re='负' then 1 else 0 end)负
      from
      test_tab
      group by to_char(dt,'yyyy-mm-dd')
      ;

to_char(date,'yyyy-mm-dd')处理日期,之后to_char(date,'yyyy-mm-dd')


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

sql分别用日期、月、年 分组 group by 分组,datepart函数

--以2013-12-10 12:56:55为例 --convert(nvarchar(10),CreateDate,120)      =>      2013-12-10 --DATEPART(m...

ORACLE用GROUP BY 来分组日期字段 按月分组

SELECT to_char(日期字段,'yyyymm'),sum(*)  FROM [TableName]  group by to_char(日期字段,'yyyymm'); SELECT t...

sql日期按月份和年份分组查询

--以2013-12-10 12:56:55为例 --convert(nvarchar(10),CreateDate,120)      =>      2013-12-10 --DATEPART...

SQL中何时使用GROUP BY

SELECT cno,MAX(grade),AVG(grade) FROM sc GROUP BY cno     当SELECT后既有表结构本身的字段,又有需要使用聚集函数(如AVG\SUM\MA...
  • tao_sun
  • tao_sun
  • 2013年03月17日 17:01
  • 1417

数据库排名sql,group by 分组查询按照时间最大值

先给出类似的简单表 DROP TABLE IF EXISTS `TouTiaoAnchor`; CREATE TABLE `TouTiaoAnchor` ( `HourId` int(10) u...
  • wallwind
  • wallwind
  • 2015年07月10日 19:26
  • 11160

SQL中Group By的使用

文章出自:http://www.cnblogs.com/rainman/archive/2013/05/01/3053703.html 1、概述2、原始表3、简单Group By4、Gr...

SQL Group by date on datetime column

SELECT        DATEADD(dd, DATEDIFF(dd, 0, postDate), 0) FROM          table WHERE        (postDa...

Linux 查找端口和该端口执行的命令和路径

netstat -apn 查看网络连接状态。 lsof -i :9988 查看9988端口运行的程序。 lsof(list open files)是一个列出当前系统打开文件的工具。 ...

java中toArray用法注意事项

java中toArray用法注意事项 toarray     java中toArray正确用法有三种,toArray方法都需要带参数:   Java代码   ...

使用Group by分组统计.rar

  • 2010年07月02日 13:12
  • 43KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sql的分组统计与group by 日期的处理
举报原因:
原因补充:

(最多只允许输入30个字)