Sql Oracle中的计数函数

Sql Oracle中的计数函数,sql,oracle,function,count,where-clause,Sql,Oracle,Function,Count,Where Clause,我正在努力解决的问题是: 我有一份不同包机的直升机名单,我需要找出哪架直升机的包机最少。一旦我发现这一点,我只需要显示一个有最少的 到目前为止,我有以下几点: SELECT Helicopter_Name , COUNT (Distinct Charter_NUM) FROM Charter_Table GROUP BY Helicopter Name 这就是我被困的地方。我意识到MIN可以用来选择最小的值,但我不确定如何将其集成到命令中 比如MIN=MIN值 我真的很感激。哦

我正在努力解决的问题是:

我有一份不同包机的直升机名单,我需要找出哪架直升机的包机最少。一旦我发现这一点,我只需要显示一个有最少的

到目前为止,我有以下几点:

SELECT Helicopter_Name 
       , COUNT (Distinct Charter_NUM)
FROM Charter_Table
GROUP BY Helicopter Name
这就是我被困的地方。我意识到MIN可以用来选择最小的值,但我不确定如何将其集成到命令中

比如MIN=MIN值


我真的很感激。

哦,我想到了一些东西,我可以补充一下:

比如说有10个包机,红色直升机的包机最少

选择直升机名称计数不同的包机数量 从Charter_表 按直升机名称分组 总数=分钟


这会带来直升机红色的价值吗?

这是一个简单的答案

SELECT Helicopter_Name
FROM Charter_Table 
GROUP BY Helicopter_Name
HAVING COUNT (Distinct Charter_NUM) = 
   (SELECT MIN(COUNT (Distinct Charter_NUM)) CNT
   FROM Charter_Table 
   GROUP BY Helicopter_Name)

有一件事你需要考虑的是,如果两个或两个以上的直升机订舱数量最少,会发生什么情况? 如果您只想选择一个,只需按计数降序排序并报告第一个结果:

SELECT * FROM (
   SELECT Helicopter_Name, c FROM (
      SELECT Helicopter_Name, COUNT (Distinct Charter_NUM) AS c
      FROM Charter_Table GROUP BY Helicopter 
   ) ORDER BY c DESC
) WHERE ROWNUM = 1;
或者,如果您需要报告所有具有最少租船数量的直升机,并考虑到联系,您可以使用排名分析功能:

SELECT Helicopter_Name, c FROM (
   SELECT Helicopter_Name, c, RANK() OVER (ORDER BY c) therank FROM (
      SELECT Helicopter_Name, COUNT (Distinct Charter_NUM) AS c
      FROM Charter_Table GROUP BY Helicopter 
   )
) WHERE therank = 1;

下面是一个解决方案,它只需将第一行从最低计数排序到最高计数:

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY Charter_Count) AS RN
    FROM (
        SELECT Helicopter_Name, COUNT(Distinct Charter_NUM) Charter_Count
        FROM Charter_Table GROUP BY Helicopter_Name
    ) AS t1
) AS t2
WHERE t2.RN = 1;
这里有一个解决方案,它需要将给定组的计数与给定所有组的最低计数进行比较。基于@Gary给出的答案,但添加了另一级子查询

SELECT Helicopter_Name, COUNT(Distinct Charter_NUM) AS Charter_Count
FROM Charter_Table 
GROUP BY Helicopter_Name
HAVING COUNT(Distinct Charter_NUM) = (SELECT MIN(C) FROM
    (SELECT COUNT(Distinct Charter_NUM) AS C
     FROM Charter_Table 
     GROUP BY Helicopter_Name))

这看起来有点像家庭作业,所以这里有一个提示——对having子句进行一些研究,但您也可以排序并获取第一个元素。哦,请按条款核对您的分组。谢谢您的帮助。。我只是补充了一个回答,这不是家庭作业,但这是我几天来一直努力想解决的问题,我甚至试过我的课堂讲稿,如果我知道我会提出最小发现值的逻辑,但他们没有在我的材料中提供这个=xooh非常感谢!很抱歉,这可能听起来很粗鲁,但你有我可以通过电子邮件与你联系的电子邮件吗?你似乎对SQL很在行,如果有人能和你谈谈,那就太好了。我是班上唯一的女生,我没有任何人可以和我讨论这项工作,我觉得很难。如果你有空闲时间,这是我的电子邮件:g.v。misa@gmail.com再次感谢你!非常感谢你的回复!我一直在关注stackoverflow,以寻找标记为oracle的问题;这里有很多很棒的SQL人员。把你的问题贴在这里,这样其他人,比如你自己也能从中受益。请把这个作为一个新问题贴出来。将此作为答案是令人困惑的。