【问题标题】:Small SQL task with a basic table带有基本表的小型 SQL 任务
【发布时间】:2012-09-28 15:52:03
【问题描述】:

好的,所以我们有练习表“员工”,它具有以下属性: fname(名字),lname(姓氏),bdate(出生日期),薪水,dno(部门编号)。

我的小任务是列出每个部门的所有员工,按部门分组,并根据最大的年龄为每个部门选择一个领导。

我只能提取每个部门的最低出生日期,但我无法提取部门中年龄最大的家伙的名字和姓氏。我写了这一行:

SELECT dno,COUNT(*),MIN(bdate) FROM employees GROUP BY dno;

我不知道怎么做,这样它就可以写出出生日期最低的员工的名字和姓氏,而不是出生日期。

你能帮帮我吗?我学得很快,但我不能很好地理解手册。我只是想我需要使用 HAVING 功能。

【问题讨论】:

  • 您使用的是什么产品。如果您的产品支持,您可以使用窗口函数

标签: sql


【解决方案1】:
select e.dno, e.fname, e.lname, em.Count
from employees e
inner join (
    select dno, min(bdate) as minbdate, count(*) as Count
    from employees
    group by dno
) em on e.dno = em.dno and e.bdate = em.minbdate

【讨论】:

  • 什么?你在跟我开玩笑吗?我在大学里上过 3 堂 SQL 课,但我们从来没有写过这么复杂的东西……哦,好吧,我想我需要了解这里所有内容的含义。
  • 不用担心,大多数人都不会在 3 堂课内掌握 SQL :)
  • @VanillaFace 那么你可能在使用子查询版本而不是这个加入版本。
【解决方案2】:
select e.dno, total, e.bdate, fname, lname
from (
        SELECT 
            dno,
            COUNT(*) as total,
            MIN(bdate) as bdate,
        from employees
        GROUP BY dno
    ) s
    inner join
    employees e on e.dno = s.dno and e.bdate = s.bdate
order by dno

【讨论】:

    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 2017-08-03
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多