【问题标题】:Find Min in rows in SQL table在 SQL 表的行中查找 Min
【发布时间】:2018-12-02 00:48:19
【问题描述】:

我试图在我的数据库中查找在数据库中出现次数最少的所有俱乐部,并显示该俱乐部名称及其出现次数。以下是我尝试过的解决方案

select club, MIN(num) 
from 
    (select count(club) as num 
     from member 
     order by club)

但是这段代码会报错:

SQL0119N 在 SELECT 子句、HAVING 子句或 ORDER BY 子句中指定的以“CLUB”开头的表达式未在 GROUP BY 子句中指定,或者它位于具有列的 SELECT 子句、HAVING 子句或 ORDER BY 子句中函数并且没有指定 GROUP BY 子句。

我是 SQL 新手 - 谁能告诉我哪里出了问题以及如何解决这个问题?

【问题讨论】:

    标签: sql database select db2


    【解决方案1】:

    您正朝着大致正确的方向前进。你需要做一个双重聚合。

    WITH Member_Count AS (SELECT club, COUNT(*) AS counted
                          FROM Members
                          GROUP BY club)
    SELECT club, counted
    FROM Member_Count 
    WHERE counted = (SELECT MIN(counted)
                     FROM Member_Count)
    

    【讨论】:

      【解决方案2】:

      您可以使用fetch first n rows only 语法:

      SELECT      club, COUNT(*)
      FROM        members
      GROUP BY    club
      ORDER BY    2 ASC
      FETCH FIRST 1 ROWS ONLY
      

      【讨论】:

      • 它有效。多谢。但是你能解释一下 order by 和 fetch 发生了什么吗?
      • @NewProgrammer7 order by 子句指定您希望数据排序(排序)的排序方式 - 这里是第二列 - 计数(因此为2),并按升序排列(因此asc)。 fetch first... 子句非常简单。因此,通过说“按照计数的升序排列结果并仅显示第一个”,您可以有效地获得计数最少的行。
      • @NewProgrammer7 - 警告!这将只返回一行。如果有多个俱乐部的会员人数相同,它只会显示其中一个,并且您每次可能会得到一个不同的。
      猜你喜欢
      • 2014-02-10
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      • 2017-02-27
      • 2020-07-28
      • 2014-09-27
      • 2016-06-02
      • 2010-09-27
      相关资源
      最近更新 更多