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...
  • KingCruel
  • KingCruel
  • 2013年12月26日 15:31
  • 26604

mysql按日期group by分组查询

SELECT DATE_FORMAT( deteline, "%Y-%m-%d %H" ) , COUNT( * )  FROM test GROUP BY DATE_FORMAT( de...
  • BlackC16
  • BlackC16
  • 2017年11月30日 22:46
  • 371

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

SELECT to_char(日期字段,'yyyymm'),sum(*)  FROM [TableName]  group by to_char(日期字段,'yyyymm'); SELECT t...
  • LanSeTianKong12
  • LanSeTianKong12
  • 2016年03月11日 13:52
  • 3617

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

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

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
  • 1644

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

--以2013-12-10 12:56:55为例 --convert(nvarchar(10),CreateDate,120)      =>      2013-12-10 --DATEPART...
  • LanSeTianKong12
  • LanSeTianKong12
  • 2016年03月11日 13:53
  • 14119

Sql server Group by 统计数量 order by时间

Sql server Group by 统计数量 order by时间
  • csharp25
  • csharp25
  • 2016年07月14日 18:09
  • 2123

按时间分组统计的SQL语句

如下表table1:   日期(exportDate)               数量(amount)    --------------                    --------...
  • michealcxt
  • michealcxt
  • 2014年05月05日 10:14
  • 4469

SQL 对表格进行按日期分组

在数据库里,有一张表名为 tb_name 里,有一个叫 resultDate 的字段,此字段里存的是日期+时间 类型的,现在这字段里面有如下的数据: 2011-11-30 14:54:16 ...
  • saindy5828
  • saindy5828
  • 2012年03月09日 09:48
  • 2353

SQL 时间截按月分组查询

选将时间截转换成日期格式,再执行分组查询 按月分组,查高询每月的记录总数,Yii用法 $art_summary = Yii::app()->db->createCommand() ->sele...
  • dreamzml
  • dreamzml
  • 2013年08月20日 23:26
  • 5370
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sql的分组统计与group by 日期的处理
举报原因:
原因补充:

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