[英]How to use MAX ( COUNT (*)) in my SQL function?
SELECT F.origin, F.destination, COUNT(DISTINCT E.ename), COUNT(F.flno)
FROM Flights F, Employees E, Certified C, Aircraft A
WHERE E.eid = C.eid AND E.salary > 100000 AND A.aid = C.aid AND F.distance >= A.cruisingrange
GROUP BY E.ename, F.origin, F.destination
HAVING (COUNT(F.flno)) = 14
问题是14
是表的max(count(F.flno))
但我不知道如何转换所有这些以替换14
为基于COUNT(F.flno)
的最大列数
这是执行此操作的一种方法,在 sql 服务器中,在其他数据库中将有您可以检查的最高等价物。
with source_qry
as(
SELECT F.origin, F.destination, COUNT(DISTINCT E.ename), COUNT(F.flno) as cnt_flno
FROM Flights F,
Employees E,
Certified C,
Aircraft A
WHERE E.eid = C.eid
AND E.salary > 100000
AND A.aid = C.aid
AND F.distance >= A.cruisingrange
GROUP BY E.ename, F.origin, F.destination
)
select top 1*
from source_qry
order by cnt_flno desc
SELECT F.origin, F.destination, COUNT(DISTINCT E.ename), COUNT(F.flno)
FROM Flights F, Employees E, Certified C, Aircraft A
WHERE E.eid = C.eid AND E.salary > 100000 AND A.aid = C.aid AND F.distance >= A.cruisingrange
GROUP BY E.ename, F.origin, F.destination
ORDER BY 4 DESC
LIMIT 1;
WITH data AS (
SELECT F.origin, F.destination, COUNT(DISTINCT E.ename) AS cnt_ename, COUNT(F.flno) AS cnt,
MAX(COUNT(F. flno)) OVER () AS maxcnt
FROM Flights F, Employees E, Certified C, Aircraft A
WHERE E.eid = C.eid AND E.salary > 100000 AND A.aid = C.aid AND F.distance >= A.cruisingrange
GROUP BY E.ename, F.origin, F.destination
)
SELECT * FROM data WHERE cnt = maxcnt;
这将处理最大数量的关系。 摆脱乱用top
和limit
的习惯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.