回 帖 发 新 帖 刷新版面

主题:小弟求救,sql查询问题(在线等)

这是一个投票结果,数据表的格式如下:
物品名称  价格   票数
a         13     22
a         12     22
a         15     19
a         17     14
b         21     45
b         22     41
b         23     40
b         20     50
查询要求是:用sql语句把每种物品名称按照票数最高选出前三名,如果票数相同按照价格最低选.我试了好多次都不对,请各位大虾帮忙,小弟这里先谢过了

回复列表 (共7个回复)

沙发

select * from
(
select * from 表名 a where 价格  in

(select top 1 价格 from 表名 b where b.物品名称=a.物品名称 and b.票数=a.票数 order by 物品名称,价格  ))c

where not exists (

select * from
(
select * from 表名 a where 价格  in

(select top 1 价格 from 表名 b where b.物品名称=a.物品名称 and b.票数=a.票数 order by 物品名称,价格  ))d

where d.物品名称=c.物品名称 and d.票数 >=c.票数 Having Count(*)>3
)

板凳

select * from tbl a
where 票数 in (select top 3 票数 from tbl
where 物品名称 = a.物品名称 and 价格=a.价格
order by 票数 desc)
order by 物品名称,票数 desc,价格

3 楼

感谢1,2楼两位大虾。这里的问题是只有一张表,在这一张表中包含上述的物品名称,价格和票数三列。按要求得出的结果应该是6条记录。2楼的大虾的结果是3条而且票数和物品名称不对应。一楼的大虾的我的表只有一张怎么办?,a和b是物品名称。望能继续赐教。谢谢

4 楼

我晕倒,楼主兄弟,a,b是同一个表啊,两个别名而已。至于c和d是两个虚拟表而已。

1楼的兄弟,赶紧加我的QQ啊,我都望眼欲穿了,呵呵。
QQ:317383432

5 楼

呵呵,我的那个有点问题,我误会人家的意思了。
人家是说最后一条如果票数重复的话,就选价格低的。。我理解的是只要有重复的就选价格低的。。。不好意思。。

6 楼

你先加我了。

7 楼

为什么非要加qq呢?在这里问问题不是很好吗?再说了,我可是认得你。嘿嘿。

我来回复

您尚未登录,请登录后再回复。点此登录或注册