布拉莫斯 发表于 2008-4-15 22:16

[已解决]一个简单的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]]

wuwei8 发表于 2008-4-16 09:18

select deptname from person,salary
having avg(bonus)>200
group by deptname
order by avg(bonus) desc

布拉莫斯 发表于 2008-4-16 11:30

回复 2# 的帖子

谢谢你的帮助,但是,好像问题还没有解决,
运行你写的脚本,有如下的错误

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

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

西风独自凉 发表于 2008-4-16 15:21

select deptname,avg(bonus) from person,salary
group by deptname
having avg(bonus)>200
order by avg(bonus) desc

布拉莫斯 发表于 2008-4-16 18:54

回复 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]]

页: [1]

编程论坛