首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 又一个SQL题目, 谢谢各位的帮忙! [已结帖,结帖人:ABC123CBA321]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ABC123CBA321
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-18 23:33:59 楼主
    注意:要求必须要用子查询,而且不允许用group by和having来解答

    SQL> select * from my_emp;
        USERID USERNAME    GENDER          DEPT_ID
    ---------- ------------ ------------ ----------
            1 adam        male                  1
            2 hellen      female                2
            3 larry        male                  1
            4 kim          male                  1
            5 bash        male                  2
            6 tom          female                1

    SQL> select * from my_dept;
      DEPT_ID DEPT_NAME                                         
    ---------- ------------
            1 it
            2 sales


    结果要变成这样:
    dept_name        male      female
    ------------ ---------- ----------
    it                    3          1
    sales                1          1
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

      3

    发表于:2008-11-18 23:41:571楼 得分:5
    SQL code
    select m.DEPT_NAME , (select count(1) from my_emp where DEPT_ID = m.DEPT_ID and GENDER = 'male') , (select count(1) from my_emp where DEPT_ID = m.DEPT_ID and GENDER = 'female') from my_dept m
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

      3

    发表于:2008-11-18 23:43:082楼 得分:10
    SQL code
    select m.DEPT_NAME , (select count(1) from my_emp where DEPT_ID = m.DEPT_ID and GENDER = 'male') male, (select count(1) from my_emp where DEPT_ID = m.DEPT_ID and GENDER = 'female') female from my_dept m
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Yang_
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      5

    发表于:2008-11-18 23:47:003楼 得分:5
    子查询不是最优解

    SQL code
    select d.DEPT_NAME, (select count(*) from my_emp where DEPT_ID =d.DEPT_ID and GENDER ='male') as male, (select count(*) from my_emp where DEPT_ID =d.DEPT_ID and GENDER ='female') as female, from my_dept d
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Yang_
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      5

    发表于:2008-11-18 23:50:574楼 得分:10
    应该:

    SQL code
    select d.DEPT_NAME, t.male, t.female from my_dept d,( select DEPT_ID,sum(case when GENDER ='male' then 1 else 0 end) as male, sum(case when GENDER ='female' then 1 else 0 end) as female from my_emp group by DEPT_ID ) as t where d.DEPT_ID=t.DEPT_ID


    ps:我上面的多了个,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-11-18 23:59:335楼 得分:5
    SQL code
    select d.DEPT_NAME, sum(case when GENDER ='male' then 1 end) as male, sum(case when GENDER ='female' then 1 end) as female from my_dept d left join my_emp e on e.DEPT_ID =d.DEPT_ID group by d.DEPT_NAME
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Liyingyue_FFS
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 08:53:516楼 得分:0
    SQL code
    select m.DEPT_NAME , (select count(1) from my_emp where DEPT_ID = m.DEPT_ID and GENDER = 'male') , (select count(1) from my_emp where DEPT_ID = m.DEPT_ID and GENDER = 'female') from my_dept m
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ChinaJiaBing
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 09:29:207楼 得分:5
    SQL code
    create table t1 (userid int,username varchar(8),genger varchar(8),dept_id int) insert into t1 select 1,'adam','male',1 union all select 2,'hellen','female',2 union all select 3,'larry','male',1 union all select 4,'kim','male',1 union all select 5,'bash','male',2 union all select 6,'tom','female',1 --select * from @t1 create table t2 (dept_id int,dept_name varchar(10)) insert into t2 select 1,'it' union all select 2,'sales' ;with cte as ( select b.dept_name,a.genger,count(*) 次数 from t1 a join t2 b on a.dept_id=b.dept_id group by dept_name,genger ) select dept_name,male= sum(case when genger='male' then 次数 else ''end), female=sum(case when genger='female' then 次数 else '' end) from cte group by dept_name --------------------- drop table t1 drop table t2 it 3 1 sales 1 1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • flairsky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 09:34:468楼 得分:0
    select m.DEPT_NAME ,
          (select count(1) from my_emp where DEPT_ID = m.DEPT_ID and GENDER = 'male') male,
          (select count(1) from my_emp where DEPT_ID = m.DEPT_ID and GENDER = 'female') female
    from  my_dept m
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ChinaJiaBing
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 09:47:269楼 得分:5
    SQL code
    if object_id('t1')is not null drop table t1 if object_id('t2')is not null drop table t2 create table t1 (userid int,username varchar(8),genger varchar(8),dept_id int) insert into t1 select 1,'adam','male',1 union all select 2,'hellen','female',2 union all select 3,'larry','male',1 union all select 4,'kim','male',1 union all select 5,'bash','male',2 union all select 6,'tom','female',1 --select * from @t1 create table t2 (dept_id int,dept_name varchar(10)) insert into t2 select 1,'it' union all select 2,'sales' ;with cte as ( select b.dept_name,a.genger,count(*) 次数 from t1 a join t2 b on a.dept_id=b.dept_id group by dept_name,genger ) select * from (select * from cte) as a pivot (sum(次数) for a.genger in (male,female)) as c
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • maco_wang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 09:53:2110楼 得分:5
    SQL code
    create table table_a(USERID int,USERNAME varchar(6),GENDER varchar(6),DEPT_ID int) insert into table_a select 1,'adam','male',1 union all select 2,'hellen','female',2 union all select 3,'larry','male',1 union all select 4,'kim','male',1 union all select 5,'bash','male',2 union all select 6,'tom','female',1 select * from table_a create table table_b(DEPT_ID int,DEPT_NAME varchar(5)) insert into table_b select 1,'it' union all select 2,'sales' select * from table_b select bb.DEPT_NAME, (select count(*) from table_a where DEPT_ID =bb.DEPT_ID and GENDER ='male') as male, (select count(*) from table_a where DEPT_ID =bb.DEPT_ID and GENDER ='female') as female from table_b bb /* DEPT_NAME male female --------- ----------- ----------- it 3 1 sales 1 1 (2 row(s) affected) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dobear_0922
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-19 10:03:1411楼 得分:0
    SQL code
    select m.DEPT_NAME , (select count(1) from my_emp where DEPT_ID = m.DEPT_ID and GENDER = 'male') male, (select count(1) from my_emp where DEPT_ID = m.DEPT_ID and GENDER = 'female') female from my_dept m
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved