标题:[已解决]一个简单的SQL查询语句
只看楼主
布拉莫斯
Rank: 1
来 自:中国太平洋舰队
等 级:新手上路
帖 子:169
专家分:0
注 册:2007-3-31
 问题点数:0 回复次数:4 
[已解决]一个简单的SQL查询语句
小弟是SQL初学者,在做实验时遇到了一点点小小的困难,请大家热心帮助一下,如果你认为我是为了完成作业而把题目发上来的话,你完全可以不理会。

用到的数据表我贴上来了,分别是 person表和salary表  

用SQL语句进行查询发放奖金(bonus)平均数大于200元的部门(Deptname),并从高到低排序。

我只会写一点   select Deptname from person,salary
               where avg()               -- 这句我不会写。。。
               order by  desc
                                            person 表
P_no     P_name   sex       BirthDate                  Date_hired                 Deptname P_boss
000001    林峰    男    1973-04-07 00:00:00.000    2003-08-03 00:00:00.000    销售部    000007
000002    谢志文    男    1975-02-14 00:00:00.000    2003-12-07 00:00:00.000    培训部    000005
000003    李浩然    男    1970-08-25 00:00:00.000    2000-05-16 00:00:00.000    销售部    000007
000004    廖小铃    女    1979-08-06 00:00:00.000    2004-05-06 00:00:00.000    培训部    000005
000005    梁玉琼    女    1970-08-25 00:00:00.000    2001-03-13 00:00:00.000    培训部    NULL  
000006    罗向东    男    1979-05-11 00:00:00.000    2000-07-09 00:00:00.000    销售部    000007
000007    肖家庆    男    1963-07-14 00:00:00.000    1998-06-06 00:00:00.000    销售部    NULL  
000008    李浩然    男    1975-01-30 00:00:00.000    2002-04-12 00:00:00.000    培训部    000005
000009    赵文龙    男    1969-04-20 00:00:00.000    1996-08-12 00:00:00.000    销售部    000007
  
           salary 表     
P_no     base     bonus    fact  
000001    2100    75    2175
000002    1800    300    2100
000003    2800    280    3080
000004    2500    250    2750
000005    2300    275    2575
000006    1750    130    1880
000007    2400    210    2610
000008    1800    235    2035
000009    2150    210    2360

[[it] 本帖最后由 布拉莫斯 于 2008-4-16 18:55 编辑 [/it]]
搜索更多相关主题的帖子: SQL 语句 person salary Deptname 
2008-04-15 22:16
wuwei8
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-4-14
得分:0 
select deptname from person,salary
having avg(bonus)>200
group by deptname
order by avg(bonus) desc
2008-04-16 09:18
布拉莫斯
Rank: 1
来 自:中国太平洋舰队
等 级:新手上路
帖 子:169
专家分:0
注 册:2007-3-31
得分:0 
回复 2# 的帖子
谢谢你的帮助,但是,好像问题还没有解决,
运行你写的脚本,有如下的错误

服务器: 消息 156,级别 15,状态 1,行 3
在关键字 'group' 附近有语法错误。

我想 应该是那个 ‘having’ 那错了。。

真理往往掌握在少数人手中,可现实却是少数服从多数!
2008-04-16 11:30
西风独自凉
Rank: 8Rank: 8
等 级:贵宾
威 望:43
帖 子:3380
专家分:28
注 册:2007-8-2
得分:0 
select deptname,avg(bonus) from person,salary
group by deptname
having avg(bonus)>200
order by avg(bonus) desc

2008-04-16 15:21
布拉莫斯
Rank: 1
来 自:中国太平洋舰队
等 级:新手上路
帖 子:169
专家分:0
注 册:2007-3-31
得分:0 
回复 4# 的帖子
谢谢你的帮助,我认真看了你写的脚本,并运行,得到的结果如下

deptname  (无列名)
培训部    243.333333
销售部    243.333333

为了验证上面的结果,我手工计算了两个部门的平均奖金,得到的结果为
培训部    256.0
销售部    226.0

所以你的结果有点碰巧,为了弄清楚为什么你的结果不对,我修改成这样。
select deptname,avg(bonus),count(bonus) from person,salary
group by deptname
having avg(bonus)>200
order by avg(bonus) desc

结果count(bonus)的值分别为 36 45  
说明person 表与 salary 表的P_no 没有对应起来。我想,如果只涉及一个表,版主你的答案应该是对的。
所以我加了一个where语句
变成这样
select deptname,avg(bonus) from person,salary
where person.P_no=salary.P_no
group by deptname
having avg(bonus)>200
order by avg(bonus) desc

结果就正确了。(我认为是这样)

谢谢版主的帮助。。。。

[[it] 本帖最后由 布拉莫斯 于 2008-4-16 18:56 编辑 [/it]]

真理往往掌握在少数人手中,可现实却是少数服从多数!
2008-04-16 18:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-209243-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051350 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved