请教SQL语句

水之轮回 2007-04-29 12:51:10
医生对病人看病开药,每开出一种药都有数量。对应如下关系:

医生工作量(ysdm,ypdm,ypsl).

ysdm:医生代码,

ypdm:药品代码,

ypsl:药品数量

函数依赖:(ysdm,ypdm)->ypsl;主码:(ysdm,ypdm)

求sql语句:

1、用药数量最多的前五名药品代码;

2、在用药数量最多的前五名药品里,列出每一种药用量最多的前十名医生代码。
...全文
287 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiao_yi 2007-04-30
  • 打赏
  • 举报
回复
1.select top 5 ypdm from hospital group by ypdm order by sum(ypsl) desc

2.select top 10 ysdm from hospital where ypdm in(select top 5 ypdm from hospital group by ypdm order by sum(ypsl) desc)


暂没考虑重名次哦。。。
simda 2007-04-30
  • 打赏
  • 举报
回复
在sql server 2005下写的
jyxhz 2007-04-29
  • 打赏
  • 举报
回复
1、用药数量最多的前五名药品代码

select top 5 ypdm from 医生工作量 group by ypdm order by sum(ypsl) DESC

2、在用药数量最多的前五名药品里,列出每一种药用量最多的前十名医生代码

select top 5 ysdm,sum(ypsl) from 医生工作量 where ypdm in (select top 5 ypdm from 医生工作量 group by ypdm order by sum(ypsl) DESC ) group by ysdm order by sum(ypsl) DESC
kenny_appleso 2007-04-29
  • 打赏
  • 举报
回复
1.
select top 5 ypdm from table
group by ypdm
order by sum(ypsl) desc
2.
select top 5 ysdm,sum(ypsl) 数量
from table
where ypdm in (select top 5 ypdm from 表名 group by ypdm order by sum(ypsl) DESC)
group by ysdm
order by sum(ypsl) DESC
ojuju10 2007-04-29
  • 打赏
  • 举报
回复
1、
select top 5 ypdm from table
group by ypdm
order by sum(ypsl) desc
2、
select top 10 a.ysdm,b.ypdm,sum(b.ypsl) from table a,(select top 5 ypdm from table
group by ypdm order by sum(ypsl) desc ) b
where a.ypdm=b.ypdm
group by a.ysdm,b.ypdm
order by sum(b.ypsl) desc
rookie_one 2007-04-29
  • 打赏
  • 举报
回复
select top 5 ysdm,sum(ypsl) 数量
from 表名
where ypdm in (select top 5 ypdm from 表名 group by ypdm order by sum(ypsl) DESC)
group by ysdm
order by sum(ypsl) DESC
rookie_one 2007-04-29
  • 打赏
  • 举报
回复
1

select top 5 ypdm from
(
select ypdm,sum(ypsl) 数量 from 表名 group by ypdm
) t
order by 数量 DESC
jyxhz 2007-04-29
  • 打赏
  • 举报
回复
1、用药数量最多的前五名药品代码

select top 5 ypdm from 医生工作量 group by ypdm order by sum(ypsl)

2、在用药数量最多的前五名药品里,列出每一种药用量最多的前十名医生代码

select top 5 ysdm,sum(ypsl) from 医生工作量 where ypdm in (select top 5 ypdm from 医生工作量 group by ypdm order by sum(ypsl) ) group by ysdm order by sum(ypsl)
水之轮回 2007-04-29
  • 打赏
  • 举报
回复
能不能将其都完整地写出来?simda(怪物史来克)说的应该是在ORACLE里的操作语句吧?不过也行。
simda 2007-04-29
  • 打赏
  • 举报
回复
第二个问题,同样道理
simda 2007-04-29
  • 打赏
  • 举报
回复
with test as(
select ypdm, rank()over(order by sum(ypsl) desc) as Rank
from 医生工作量
group by ypdm
)
select * from test where rank <=5

这样写就可以把所有有重复名次的记录得出,比如说有两个第5名会显示6条记录
simda 2007-04-29
  • 打赏
  • 举报
回复
如果有两个第5名的话,上面的方法会有问题的吧
HappinessBoy 2007-04-29
  • 打赏
  • 举报
回复
学习噶
水之轮回 2007-04-29
  • 打赏
  • 举报
回复
第一问:select top 5 ypdm from table
group by ypdm
order by sum(ypsl) desc
这个没问题
但第二问是要求第一问中5种药品用药量前十名的医生代码,一般查询结果应该是50条记录吧。
wkl1985411 2007-04-29
  • 打赏
  • 举报
回复
select top 5 ypdm ypsl from "表名"
group by ypdm

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧