sql语句 分组查询前10条数据

我有两张表 ,一张为分类表,名为 class,字段有ID,classid,classname, 另一张为产品表 名为product,字段有ID,classid(与表class 里的classid 对应),proname,num(数量) 现在 我要查询出 product 表里面每个分类有多少(sum(num)),分类名(classname),分类id(classid),并且以 sum(num)为条件倒序排列 ,,,,
说的不是很明白 , 不明白的HI我

class classid classname
product classid proname num
select top 10 c.classid ,c.classname,sum(p.num) from class c,product p where p.classid=c.classid group by c.classid order by sum(p.num) desc
有的不能用top。,不同数据库软件查询好像有细微的差别。追问

貌似不能用啊

追答

select c.classid ,c.classname,sum(p.num),r from class c,product p where p.classid=c.classid group by c.classid,c.classname order by sum(p.num) desc
.。。掉了个。东西。.

追问

可以执行通过, 但是.. 他查询出来的不是十条 而且不是倒序排列的....

追答

select c.classid ,c.classname,sum(p.num) from class c,product p where p.classid=c.classid and rownum<=10 group by c.classid,c.classname order by sum(p.num) desc

..找到了。有的版本好像不能用top这个。要用别的代替。找了一下。才找到。

追问

问题解决了 非常感谢各位的回答

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-24
select sum(a.num) as cnum, min(b.classname) as clei,min(b.classid) as cid
from class b, product a
where b.classid = a.classid
group by a.classid
order by cnum desc

如果要前 10,加TOP 10在select 后。
第2个回答  2012-12-24
select top 10 b.classid,b.classname,sum(a.num) as num

from product a,分类表 b
where a.classid=b.classid
order by num desc追问

貌似不能用啊

追答

你是什么数据库?

第3个回答  2012-12-24
select top 10 * from (select t2.classname,sum(t1.num) as num .t1.id from product t1, class t2 where t1.id=t2.classid) t1 group by t1.num desc
第4个回答  2012-12-24
select b.classname,sum(a.num) as num

from product a left join class b
where a.classid=b.classid
order by num desc

sql语句 分组查询前10条数据
class classid classname product classid proname num select top 10 c.classid ,c.classname,sum(p.num) from class c,product p where p.classid=c.classid group by c.classid order by sum(p.num) desc 有的不能用top。,不同数据库软件查询好像有细微的差别。

t-sql数据分组
在T-SQL中,数据分组是一项重要操作,用于对数据进行聚合和分析。首先,我们可以使用`SELECT`语句获取前几条数据,如选取订单详情表(ordredetails)中前10个金额最高的记录,通过`ORDER BY amt DESC`排列,其中`amt`字段为单价乘以数量:SELECT top 10 orderid,amt=unitprice*quantityFROM ordredetails O...

求一条SQL语句:能一次计算出各科前10名学生的平均成绩。
(select top 10 语文 from 成绩表 order by 语文 desc) as x union all select '数学' as 科目, avg(数学) as 平均成绩 from (select top 10 数学 from 成绩表 order by 数学 desc) as y union all select '英语' as 科目, avg(英语) as 平均成绩 from (select top 10 英语 fro...

...交易记录按照账号和客户编号分组取交易金额前10条的记录
t1.*,rank() over(partition by t1.编号 order by t1.日期 desc) as rk from contract t1 ) t2 where 1=1 and t2.rk = 1 语句简介:以“t1.编号”为分区维度,每个分区再以“t1.日期 desc”为排序规则,返回每个分区排序后的顺序号,每个分区以 1 为排序起始索引。

oracle得到每个月的前十条数据
如你查询上面图的sql等于时sql 只要在你sql前后加个条件就行的 比如:select * from (sql) where rownum<11 再有 你如果想要T_month为准的 就在你的sql里面加order by排序 然后外面加我这个外套sql就行的 希望对你有所帮助

sql server 2005 查找并统计前10名数量最多的用户
例表tab_test ,数量列名:sl select top 10 * from tab_test order by d desc语句执行,先将结果集按 sl 的降序 排序,然后使用 top 10 选择前10行数据。如果单一用户有多条记录,那需要将用户分组,计算数量 例表tab_test ,数量列名:sl,用户列名: user select top 10 user,sum(sl) as '...

sql查询 从一张表中找到每个班成绩排在第十名的信息。
--按成绩降序排列 取前10个即可 select a.number,b.class,b.score from st_score as a join (select top(1) t.class,t.score from (select top 10 class,score from st_score group by class order by score desc) as t order by t.score) as b on a.class=b.class and a....

oracle得到每个月的前十条数据
实现思路就是先通取出所有的满足条件的数据,之后找到前面的10条数据。select t.* from (select 表名.*,row_number() over (partition by t_year||t_tmonth order by id) rn from 表名) t where rn<=10 备注:必须先通过over方法分组month找到符合条件的数据,之后在取出前10条。

sql取出每个分组的前几条
一个简单的方法就是排序之后给它分配序号,根据序号去找前几条 select from (select 公司,人数,--按人数从多到少分配序号,不同公司会重1开始 rank() over (partition by 公司 order by 人数 desc) as xh from 公司档案) as A where xh<=2 --取前几位就写几 order by 公司,人数 desc ...

在Oracle怎样查询表中的top10条记录
=== Rownum和row_number() over()的使用 ROWNUM是Oracle从8开始提供的一个伪列,是把SQL出来的结果进行编号,始终从1开始,常见的用途就是用来分页输出.比如SELECT *FROM torderdetail a WHERE ROWNUM <= 10 这条语句就是输出前10条纪录,在这里用途上类似于sql sever的top,不过rownum对于指定编号...

相似回答