gpt4 book ai didi

mysql - SQL出现比较?

转载 作者:行者123 更新时间:2023-11-29 06:05:40 26 4
gpt4 key购买 nike

enter image description here enter image description here

**上面是这张 table 的照片*

我需要为一个数据库编写一个查询,该数据库列出控制最多项目的部门的部门名称。

在我的数据库中,部门由 dnum 标识。

所以我的问题是,我如何编写检查 SQL 中 Dnum 出现次数最多的代码?因为这就是我确定控制最多项目的部门的方式。

我尝试了几个不同的查询,但没有一个能正常工作。

谁能解释一种可以比较事件的方法?

最佳答案

您已经知道如何按部门计数:

select dnum, count(*) from project group by dnum;

在 SQL Server 中,很容易选择出现次数最多的 dnum;您按降序排列并使用 TOP() WITH TIES 获取顶行。

select top(1) with ties dnum from project group by dnum order by count(*) desc;

(在标准 SQL 中,order by count(*) desc fetch 1 row with ties)。

在标准 SQL(和 SQL Server)中,您还可以选择按计数对记录进行排名:

select dnum
from (select dnum, rank() over (order by count(*) desc) as rnk from project) ranked
where rnk = 1;

MySQL 没有提供任何这些选项,缺少 WITH TIES 子句和分析函数,例如 RANK

所以在 MySQL 中,您不会一步找到具有最大计数的部门,而只会先找到最大计数。您只会在第二步中获得相应的部门。

这里有两种方法:

select count(*) from project group by dnum order by count(*) desc limit 1;

select max(cnt) from (select count(*) as cnt from project group by dnum) counted;

然后再次加入计数的部门:

select p.dnum
from
(
select count(*) as cnt
from project
group by dnum
order by count(*) desc limit 1
) m
(
select dnum, count(*) as cnt
from project
group by dnum
) p on p.cnt = m.cnt;

最后一步在两个 DBMS 中是相同的:

select dname
from departments
where dnumber in (select dnum ...);

(或者加入 departments 表,这样您就可以同时显示姓名和人数。)

关于mysql - SQL出现比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41821097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com