首页 > 试题广场 >

汇总各个部门当前员工的title类型的分配数目

[编程题]汇总各个部门当前员工的title类型的分配数目
  • 热度指数:318276 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个部门表departments简况如下:
dept_no dept_name
d001 Marketing
d002 Finance

有一个,部门员工关系表dept_emp简况如下:
emp_no
dept_no 
from_date 
to_date
10001 d001
1986-06-26 9999-01-01
10002 d001
1996-08-03 9999-01-01
10003 d002 1995-12-03 9999-01-01


有一个职称表titles简况如下:
emp_no title form_date to_date
10001 Senior Engineer 1986-06-26 9999-01-01
10002
Staff 1996-08-03 9999-01-01
10003
Senior Engineer
1995-12-03 9999-01-01


汇总各个部门当前员工的title类型的分配数目,即结果给出部门编号dept_no、dept_name、其部门下所有的员工的title以及该类型title对应的数目count,结果按照dept_no升序排序,dept_no一样的再按title升序排序
dept_no
dept_name
title count
d001
Marketing
Senior  Engineer 1
d001
Marketing
Staff 1
d002
Finance
Senior  Engineer
1

示例1

输入

drop table if exists  `departments` ; 
drop table if exists  `dept_emp` ; 
drop table if exists  titles ;
CREATE TABLE `departments` (
`dept_no` char(4) NOT NULL,
`dept_name` varchar(40) NOT NULL,
PRIMARY KEY (`dept_no`));
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE titles (
`emp_no` int(11) NOT NULL,
`title` varchar(50) NOT NULL,
`from_date` date NOT NULL,
`to_date` date DEFAULT NULL);
INSERT INTO departments VALUES('d001','Marketing');
INSERT INTO departments VALUES('d002','Finance');
INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01');
INSERT INTO dept_emp VALUES(10003,'d002','1995-12-03','9999-01-01');
INSERT INTO titles VALUES(10001,'Senior Engineer','1986-06-26','9999-01-01');
INSERT INTO titles VALUES(10002,'Staff','1996-08-03','9999-01-01');
INSERT INTO titles VALUES(10003,'Senior Engineer','1995-12-03','9999-01-01');

输出

d001|Marketing|Senior Engineer|1
d001|Marketing|Staff|1
d002|Finance|Senior Engineer|1
select a.dept_no,c.dept_name,b.title, count(b.title) as`count`
from dept_emp a
left join titles b
on a.emp_no=b.emp_no
left join departments c
on a. dept_no= c. dept_no
where a.to_date='9999-01-01' and b.to_date='9999-01-01'
group by a.dept_no, b.title
order by a.dept_no, b.title
发表于 2025-04-09 16:03:40 回复(0)
真拉低智商
with
    k as (
        select
            a.dept_no,
            dept_name,
            title,
            count(title)
        from
            dept_emp a
            left join departments b on a.dept_no = b.dept_no
            left join titles c on c.emp_no = a.emp_no
        group by a.dept_no,dept_name, title
        order by a.dept_no,title
    ) 
    select * from k

发表于 2025-04-02 13:49:58 回复(0)
SELECT
    d.dept_no,
    d.dept_name,
    t.title,
    COUNT(t.emp_no) AS count
FROM
dept_emp AS de
JOIN titles AS t ON de.emp_no = t.emp_no
JOIN departments AS d ON d.dept_no = de.dept_no
GROUP BY d.dept_no,d.dept_name,t.title
ORDER BY d.dept_no

发表于 2025-02-26 14:58:25 回复(0)
select
*
,count(title) count
from
(
select 
de.dept_no dno
,dept_name
,title
from 
dept_emp de
left join
titles t
on de.emp_no=t.emp_no
left join departments d
on de.dept_no=d.dept_no
) zi1
group by dno,title
order by dno,title

发表于 2025-02-08 12:22:25 回复(0)

select

dept_no, dept_name, title

,count(*) as count

from titles

left join dept_emp using(emp_no)

left join departments using(dept_no)

group by 1, 2, 3

order by 1, 3

怎么就过了,困难题?
是不是我没有考虑全面?

发表于 2025-01-20 23:20:07 回复(0)
select
    d.dept_no,
    d.dept_name,
    t.title,
    count(t.title) as count
from
    departments d
    inner join dept_emp e on d.dept_no = e.dept_no
    inner join titles t on e.emp_no = t.emp_no
group by
    d.dept_no,
    d.dept_name,
    t.title
order by
    d.dept_no,
    t.title;

发表于 2025-01-03 17:04:17 回复(0)
select dept_no,dept_name,title,count(*)
from dept_emp de
join titles t using(emp_no)
join departments using(dept_no)
where t.to_date = '9999-01-01' and de.to_date = '9999-01-01'
group by dept_no,dept_name,title
order by dept_no,title 
请问这样写有问题吗
发表于 2024-12-29 20:38:46 回复(0)
select
    d.dept_no,
    d.dept_name,
    t.title,
    count(t.title) count
from
    dept_emp de
    left join departments d on de.dept_no = d.dept_no
    left join titles t on de.emp_no = t.emp_no
group by
    de.dept_no,
    t.title
order by
    dept_no,
    title

发表于 2024-11-27 17:05:47 回复(0)
select
d.dept_no dept_no
,d.dept_name dept_name
,t.title title
,count(e.dept_no) count
from dept_emp e
left join departments d
on e.dept_no = d.dept_no
left join titles t
on e.emp_no = t.emp_no
group by 1,3
order by 1,3
发表于 2024-11-24 14:16:54 回复(0)
select d.dept_no,d.dept_name,title,count(title) as count from departments as d
inner join dept_emp as de on d.dept_no=de.dept_no and de.to_date='9999-01-01'
inner join titles as t on t.emp_no=de.emp_no and t.to_date='9999-01-01'
group by d.dept_no,d.dept_name,title
order by d.dept_no,title;
发表于 2024-10-26 17:24:34 回复(0)
select
d.dept_no,
m.dept_name,
t.title,
count(*) as count
from dept_emp d
join titles t
on d.emp_no = t.emp_no
left join departments m
on d.dept_no = m.dept_no
group by d.dept_no,m.dept_name,t.title
order by d.dept_no,t.title
发表于 2024-09-30 10:05:31 回复(0)
SELECT DISTINCT de.dept_no,d.dept_name,t.title,COUNT(de.dept_no) OVER(PARTITION BY de.dept_no,title ORDER BY d.dept_no)
FROM dept_emp de
JOIN departments d ON de.dept_no=d.dept_no
JOIN titles t ON de.emp_no=t.emp_no
ORDER BY dept_no,title
发表于 2024-09-04 14:08:45 回复(0)
select
    de.dept_no,
    ds.dept_name,
    title,
    count(title) as count
from
    dept_emp de
    left join titles t on de.emp_no = t.emp_no
    left join departments ds on ds.dept_no = de.dept_no
GROUP BY
    de.dept_no,
    title
ORDER BY
    dept_no,
    title asc

发表于 2024-07-27 18:13:00 回复(0)
SELECT distinct
    dt.dept_no,
    ds.dept_name,
    dt.title,
    dt.count
FROM
    (
        SELECT
            d.*,
            t.title,
            COUNT(t.title) over (
                PARTITION BY
                    d.dept_no,
                    t.title
                ORDER BY
                    d.dept_no,
                    t.title ASC
            ) AS COUNT
        FROM
            dept_emp d
            JOIN titles t ON d.emp_no = t.emp_no
    ) dt
    left JOIN departments ds ON dt.dept_no = ds.dept_no
ORDER BY
    dt.dept_no ASC,
    dt.title ASC;

发表于 2024-06-22 23:43:56 回复(0)
select
    d.dept_no,
    d.dept_name,
    t.title,
    count(*) count
from departments d left join dept_emp de
using (dept_no)
join titles t
on de.emp_no=t.emp_no
group by d.dept_no,title 
order by d.dept_no,t.title
发表于 2024-06-10 14:18:29 回复(2)
我出息了 会做题 对的 竟然

SELECT d.dept_no,	d.dept_name	,t.title,COUNT(*) 
FROM departments d , dept_emp de ,titles t
where d.dept_no = de.dept_no
and de.emp_no = t.emp_no
and de.to_date='9999-01-01'
and t.to_date='9999-01-01'   
GROUP BY d.dept_no,t.title
ORDER BY d.dept_no, t.title;

发表于 2024-05-28 18:32:36 回复(4)
select
    m.dept_no as dept_no,
    n.dept_name as dept_name,
    m.title as title,
    m.count as count
from
(
    select
        a.dept_no,b.title,count(a.emp_no) as count
    from
    (
        select emp_no,dept_no  from dept_emp where to_date='9999-01-01'
    ) as a
    join
    (
        select emp_no,title from titles where to_date='9999-01-01'
    ) as b
    on a.emp_no=b.emp_no
    group by  a.dept_no,b.title
) as m
join
(
    select * from departments
) as n
on m.dept_no=n.dept_no
order by m.dept_no asc,m.title asc
发表于 2024-05-03 15:07:12 回复(0)
为什么只对title分类不行啊,呜呜呜呜
编辑于 2024-04-02 18:08:59 回复(0)