sql - 聚合子查询
问题描述
我很难找出如何从员工最多的表中获取项目编号或项目名称
create table Pro_works_on
(
EID char(9) ,
PNO char(9) ,
Pro_HOURS smallint not null,
constraint pk_Pro_works_on primary key(EID,PNO),
);
SELECT
p.PNO
FROM
Pro_works_on AS p
,(
SELECT
COUNT(p.EID) AS numOfEmployee
,p.PNO
FROM
Pro_works_on AS p
GROUP BY
p.PNO
) AS L
WHERE
MAX(L.numOfEmployee) = COUNT(p.EID);
它产生以下错误:
子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。
解决方案
使用order by
和某种限制条款——如果你想要一行。在标准 SQL 中:
select p.PNO, count(*) as numOfEmployee
from Pro_works_on p
group by p.PNO
order by count(*) desc
fetch first 1 row only;
在 SQL Server 中,您可以将top (1) or
top (1) 与 ties` 一起使用:
select top (1) p.PNO, count(*) as numOfEmployee
from Pro_works_on p
group by p.PNO
order by count(*) desc;
推荐阅读
- ios - OpenGL ES 错误:在没有完整 mip 链的情况下启用 Mipmapping
- php - 将具有特定键的数组元素移动到数组的开头
- css - 使用 Webpack 和 React 加载 CSS
- excel - Excel:匹配 2 个项目,包括日期是否在多个工作表上的日期范围之间
- r - 在 R 和 Rapidminer 中使用 H2O 3.8.2.6 的 GBT 算法
- azure - Azure 数据工厂活动副本:使用 @pipeline().TriggerTime 评估接收器表中的列
- c# - 在 C# 中运行测试方法时,抛出线程被 Aborted 异常
- android - Google Admob MobileAds.Initialize() 问题
- asp.net - 如何从 .net 中的字符串读取 X509 签名证书内容?
- python - “Python 已停止工作” - Windows 10 上的 openalpr