ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » Oracle开发 » 请教一个SQL的写法

标题: 请教一个SQL的写法
离线 imake
大三学生



精华贴数 0
个人空间 0
技术积分 339 (5767)
社区积分 4 (18706)
注册日期 2007-5-31
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-6-27 17:06 
请教一个SQL的写法

表的模式是:
Works(company,employee,salary)
要求查询哪个公司的员工最多。
我知道可以通过以下语句来查询每个公司对应的人数,但是怎么查哪个公司的人最多呢?
select company,count(*)
from Works
group by company


只看该作者    顶部
离线 jvkojvkoyu
小马哥2


精华贴数 0
个人空间 0
技术积分 424 (4582)
社区积分 827 (1054)
注册日期 2006-12-14
论坛徽章:135
2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术
2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术

发表于 2008-6-27 17:07 
order by 一下啊


只看该作者    顶部
离线 visual2006



精华贴数 0
个人空间 0
技术积分 776 (2438)
社区积分 4 (18477)
注册日期 2006-7-23
论坛徽章:1
      
      

发表于 2008-6-27 17:33 
select company,max(cnt) from
(select company,count(employee) cnt from works group by company)


只看该作者    顶部
在线/呼叫 liang573728
烂石头



精华贴数 0
个人空间 0
技术积分 298 (6596)
社区积分 1 (39704)
注册日期 2005-10-15
论坛徽章:1
授权会员     
      

发表于 2008-6-27 18:10 
select company from(
        select company,count(employee) emp
          from  work
          group by company
)
where emp=(
        select max(emp2)
          from (
                select company,count(employee) emp2
                  from work
                 group by company
                )
        )


只看该作者    顶部
离线 jvkojvkoyu
小马哥2


精华贴数 0
个人空间 0
技术积分 424 (4582)
社区积分 827 (1054)
注册日期 2006-12-14
论坛徽章:135
2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术
2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:马术

发表于 2008-6-27 18:28 
楼上的语句也太麻烦了


只看该作者    顶部
离线 caizhuoyi
Oracle Stranger


精华贴数 2
个人空间 0
技术积分 1524 (1104)
社区积分 448 (1497)
注册日期 2006-3-1
论坛徽章:4
授权会员生肖徽章2007版:龙2008北京奥运纪念徽章:棒球数据库板块每日发贴之星  
      

发表于 2008-6-27 19:37 
来一个:

SELECT company, cnt
  FROM (SELECT company, COUNT(employee) cnt
          FROM works
         GROUP BY company
         ORDER BY 2 DESC)
WHERE rownum = 1;


__________________
我不在江湖,但江湖中有我的传说;
我身在江湖,江湖里却没有我的传说。
只看该作者    顶部
离线 gthboy
万事如意


精华贴数 1
个人空间 0
技术积分 1769 (934)
社区积分 2 (29343)
注册日期 2006-6-25
论坛徽章:2
2008北京奥运纪念徽章:柔道     
      

发表于 2008-6-27 19:52 
3楼的代码应该很容易看出来执行不了,company后面跟了个分组函数,可是主查询里面又没有group by company。

6楼的有个小问题,就是对于几个公司人数刚好都一样多,谁也不是最多的时候,只能查到一个。


__________________
只看该作者    顶部
离线 caizhuoyi
Oracle Stranger


精华贴数 2
个人空间 0
技术积分 1524 (1104)
社区积分 448 (1497)
注册日期 2006-3-1
论坛徽章:4
授权会员生肖徽章2007版:龙2008北京奥运纪念徽章:棒球数据库板块每日发贴之星  
      

发表于 2008-6-27 20:10 
回复 #7 gthboy 的帖子

若要查询多个相同的最大值,改一下:
SELECT *
  FROM (SELECT company, cnt, rank() over(ORDER BY cnt DESC) rn
          FROM (SELECT company, COUNT(employee) cnt
                  FROM works
                 GROUP BY company))
WHERE rn = 1;


__________________
我不在江湖,但江湖中有我的传说;
我身在江湖,江湖里却没有我的传说。
只看该作者    顶部
离线 gthboy
万事如意


精华贴数 1
个人空间 0
技术积分 1769 (934)
社区积分 2 (29343)
注册日期 2006-6-25
论坛徽章:2
2008北京奥运纪念徽章:柔道     
      

发表于 2008-6-27 20:19 
恩,不错,用了rank和over。我还没有学会这两个东西,只能看懂4楼的,唉!


__________________
只看该作者    顶部
离线 imake
大三学生



精华贴数 0
个人空间 0
技术积分 339 (5767)
社区积分 4 (18706)
注册日期 2007-5-31
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-6-27 21:36 
我用的是MySQL测试
SELECT company, cnt
  FROM ( SELECT company, COUNT(employee) cnt
         FROM works
         GROUP BY company
         ORDER BY 2 DESC
  )
WHERE rownum = 1
但是报错:Every derived table must have its own alias
是只有Oracle才能这样查吗?


只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问