使用sql的分组函数之后,怎样在被分组的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用sql的分组函数之后,怎样在被分组的数据相关的知识,希望对你有一定的参考价值。

sqlserver 分组函数,请参阅:

sqlserver分组开窗函数的用法

用这些函数,分组后,可以实现分组内部编号排序,例:

create table A  ([姓名] nvarchar(20),[订单数] int,[订单日期] datetime  )
go
insert into A ([姓名],[订单数],[订单日期]) values ('www.maomao365.com',1900,'2014-5-6')
insert into A ([姓名],[订单数],[订单日期]) values ('www.maomao365.com',1800,'2018-5-6')
insert into A ([姓名],[订单数],[订单日期]) values ('www.maomao365.com',1800,'2018-5-6')
insert into A ([姓名],[订单数],[订单日期]) values ('小张',100,'2013-5-6')
insert into A ([姓名],[订单数],[订单日期]) values ('小明',2600,'2013-1-6')
insert into A ([姓名],[订单数],[订单日期]) values ('小明',1800,'2013-5-6')
insert into A ([姓名],[订单数],[订单日期]) values ('小李',888,'2017-3-6')
go

/*row_number 返回分组后的连续排序,不会出现重复的排序值*/
select row_number() over(partition by [姓名] order by [订单日期] desc ) as keyId,* from A 

/*rank 返回分组后的连续排序,会出现跳跃排序值*/
select rank() over(partition by [姓名] order by [订单日期] desc ) as keyId,* from A 

/*dense_rank 返回分组后的连续排序,不会出现跳跃排序值,但是会出现重复的排序值*/
select dense_rank() over(partition by [姓名] order by [订单日期] desc ) as keyId,* from A 

go
truncate table A
drop     table A

参考技术A 问题可以描述地详细一点吗?

MySQL 怎样分组查询

MySQL GROUP BY 子句

GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

具体语法参考:

from 树懒学堂 - 一站式数据知识平台



参考技术A 分组查询:

SELECT 要显示的列 FROM 表 GROUP BY 要分组的列
如:SELECT sname,age,address FROM student GROUP BY address
上面就是把地址address列进行分组,显示姓名、年龄还有地址
分组查询加条件:
SELECT 要显示的列 FROM 表 WHERE 条件 GROUP BY 要分组的列
如:SELECT sname,age,address FROM student WHERE age<17 GROUP BY address
上面就是把地址address列进行分组,符合年龄小于17岁的才显示出符合的姓名、年龄还有地址
参考技术B   mysql
  与
  oracle
  中分组、聚合函数的区别!
  
  
  
  今天需要这样一句
  sql
  :先用
  group by
  进行分组,然后利用聚合函数
  count
  或者
  sum
  进行计算,并显示
  其它的辅助信息。
  
  在
  mysql
  环境中,我模拟如下环境:
  
  CREATE TABLE `room` (
  
  
  `rid` varchar(5) default NULL,
  
  
  `rname` varchar(5) default NULL,
  
  
  `pid` int(11) default NULL,
  
  
  `seq` int(11) NOT NULL auto_increment,
  
  
  PRIMARY KEY
  (`seq`)
  
  
  ) ENGINE=InnoDB DEFAULT
  CHARSET=utf8
  
  房间表,
  seq
  房间入住序号
  (主键)
  ,
  rname
  为房间名,这里不考虑第三范式
  
  情景:人住房间,
  
  统计某个房间某个人住的次数
  
  
  
  用户表,客人的信息
  
  CREATE TABLE `user1` (
  
  
  `ID` int(11) NOT NULL auto_increment,
  
  
  `USERNAME` varchar(50) default '',
  
  
  `PASSWORD` varchar(50) default '',
  
  
  PRIMARY KEY
  (`ID`)
  
  
  ) ENGINE=InnoDB DEFAULT CHARSET=gbk
  
  Mysql
  中语句如下:
  
  select count(u.username)
  ,
  r.rname
  ,r.rid,r.pid
  
  from room r,user1 u
  
  where r.pid=u.id
  
  group by r.rid,r.pid
  
  这里
  r.rname
  并没有出现在
  group by
  子句、聚合函数中,但是
  MYSQL
  中仍然能够执行、列
  出数据。
  
  但是,在
  ORACLE
  中,却不能!
  !
  !
  !
  
  Oracle
  环境中:
  
  /*
  
  --
  显示:
  Ora-00979 not a ORDER BY expression
  
  --
  因为:
  order by
  后边的
  c.channel_code
  不在
  ORDER BY
  子句中
  
  
  select count(c.channel_name),m.media_name
  
  from channel c,media m
  
  where c.media_code = m.media_code
  
  group by c.media_code,m.media_name
  
  order by
  c.channel_code
  
  
  
  --
  显示:
  Ora-00979 not a GROUP BY expression
  
  --
  因为:
  group by
  或者聚合函数中没有包含
  c.channel_name
  
  select count(c.channel_name),m.media_name,
  c.channel_name
  
  from channel c,media m
  本回答被提问者和网友采纳
参考技术C 查询每个部门的部门编号和每个部门的工资和:
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno;
查询每个部门的部门编号以及每个部门的人数:
SELECT deptno,COUNT(*)
FROM emp
GROUP BY deptno;
查询每个部门的部门编号以及每个部门工资大于1500的人数:
SELECT deptno,COUNT(*)
FROM emp
WHERE sal>1500
GROUP BY deptno;
参考技术D Group by 要分的组名字

以上是关于使用sql的分组函数之后,怎样在被分组的数据的主要内容,如果未能解决你的问题,请参考以下文章

sql 分组取最新的数据sqlserver巧用row_number和partition by分组取top数据

sql中根据表中一个字段分组分别统计每个分组的记录数

基础-SQL-DQL-分组查询

Sql

Flink SQL 分组窗口函数 Group Window 实战

Spark SQL 中分组依据和窗口函数如何交互?