主题:小弟求救,sql查询问题(在线等)
qijicn
[专家分:0] 发布于 2005-11-14 09:30:00
这是一个投票结果,数据表的格式如下:
物品名称 价格 票数
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个回复)
沙发
cwb1128 [专家分:3120] 发布于 2005-11-14 12:37:00
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
)
板凳
菜鸭 [专家分:5120] 发布于 2005-11-14 13:00:00
select * from tbl a
where 票数 in (select top 3 票数 from tbl
where 物品名称 = a.物品名称 and 价格=a.价格
order by 票数 desc)
order by 物品名称,票数 desc,价格
3 楼
qijicn [专家分:0] 发布于 2005-11-14 14:00:00
感谢1,2楼两位大虾。这里的问题是只有一张表,在这一张表中包含上述的物品名称,价格和票数三列。按要求得出的结果应该是6条记录。2楼的大虾的结果是3条而且票数和物品名称不对应。一楼的大虾的我的表只有一张怎么办?,a和b是物品名称。望能继续赐教。谢谢
4 楼
hanzhijun402 [专家分:3690] 发布于 2005-11-14 15:42:00
我晕倒,楼主兄弟,a,b是同一个表啊,两个别名而已。至于c和d是两个虚拟表而已。
1楼的兄弟,赶紧加我的QQ啊,我都望眼欲穿了,呵呵。
QQ:317383432
5 楼
cwb1128 [专家分:3120] 发布于 2005-11-14 16:00:00
呵呵,我的那个有点问题,我误会人家的意思了。
人家是说最后一条如果票数重复的话,就选价格低的。。我理解的是只要有重复的就选价格低的。。。不好意思。。
7 楼
cwb1128 [专家分:3120] 发布于 2005-11-14 16:42:00
为什么非要加qq呢?在这里问问题不是很好吗?再说了,我可是认得你。嘿嘿。
我来回复