简体   繁体   English

如何在我的 SQL function 中使用 MAX ( COUNT (*))?

[英]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

The thing is that 14 is the max(count(F.flno)) of the table but I don't know how to transform all of this to replace that 14 for the maximum number of a column based on COUNT(F.flno)问题是14是表的max(count(F.flno))但我不知道如何转换所有这些以替换14为基于COUNT(F.flno)的最大列数

Here is a way to do this, in sql server, in other databases there would be the top equivalent which you can check.这是执行此操作的一种方法,在 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;

This will handle ties in the maximum count.这将处理最大数量的关系。 Get away from the habit of using top and limit indiscriminately.摆脱乱用toplimit的习惯。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM