sql如何求分组计数之后计数的最大值

如题所述

插入测试记录:

[sql] view plain copy

insert into students values('数学','Jack','Tianjin',80)  

insert into students values('数学','Jordan','Tianjin',80)  

insert into students values('数学','James','Beijing',55)  

insert into students values('英语','Jack','Tianjin',90)  

insert into students values('英语','Jordan','Tianjin',60)  

insert into students values('英语','James','Beijing',100)  

insert into students values('语文','Jack','Tianjin',60)  

insert into students values('语文','Tom','Tianjin',77)  

insert into students values('语文','Jordan','Tianjin',68)  


想要抓取每个科目第一名的整条信息,可以使用Row_number()函数:

select  *  

from (  

select course,stu_name,city,score,ROW_NUMBER() over(partition by course order by score desc) as rn  

from students  

) a  

where a.rn <=1;    

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-16

    分组查询,查询出每组数据的数量

      select count(*) from table group by xx

    以上一个sql为结果集,查询出最大的数量

      select max(xx) from (select count(*) from table group by xx ) a

      a是取的别名

      xx是你分组的表的列名

      table换成表名

追问

题目是显示选课门数最多同学的学号和选课门数

追答

你的表结构是什么样子的,1张表吗,给我截个图也许啊

追问

追答
select * from 
(select Sno , count(*) from sc group by Sno) a
where count = (select max(count) from (select count(*) from sc group by Sno) b)

你试试,应该是可以的  

追问

a和b是什么意思?

追答

a 和b 分别是两个结果集的别名

select * from
(select Sno , count(*) from sc group by Sno) a
where count = (select max(count) from (select count(*) from sc group by Sno) b)

我把你表都弄下来了,试了挺好

追问

count 是unknown

追答

我这里是没问题的,未知列可能是没加别名的问题, 那你count(*)加上别名count(*) c

第2个回答  2015-07-16
用子查询啊
select max(a) from (select X1,X2,count(*) as a from table group by X1,X2) a
我说的绝对没问题。
子查询,X1,X2指你分组的字段,count(*) 指分组后的行数(计数),并定义别名是a
主查询 查最大的技术 注意 from 后面的子查询也定义了一个表别名追问

题目是显示选课门数最多同学的学号和选课门数

第3个回答  2015-07-16
select max(count(字段)) from 表名称 where 条件追问

报错,好像不能套用

相似回答