在SQL表中的行中查找最小值

在SQL表中的行中查找最小值,sql,database,select,db2,Sql,Database,Select,Db2,我试图找到数据库中出现次数最少的所有俱乐部,并显示该俱乐部名称及其出现次数。下面是我尝试的解决方案 select club, MIN(num) from (select count(club) as num from member order by club) 但是这段代码抛出了一个错误: SQL0119N GROUP BY子句中未指定以SELECT子句、HAVING子句或ORDER BY子句中指定的CLUB开头的表达式,或者该表达式位于具有列函数的SELE

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

select club, MIN(num) 
from 
    (select count(club) as num 
     from member 
     order by club)
但是这段代码抛出了一个错误:

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

我是SQL新手-有人能告诉我哪里出了问题,我如何解决这个问题吗?

您可以使用以下语法:


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

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)

它起作用了。非常感谢。但是你能解释一下order by和fetch中发生了什么吗?@NewProgrammer7 order by子句指定了你想要排序的数据的排序-这里是第二列-计数为2,升序为asc。先去拿。。。这个条款很直截了当。因此,如果按照计数的升序按结果排序,而fest只是第一个,则可以有效地获得计数最小的行。@NewProgrammer7-警告!这将只返回一行。如果有多个俱乐部拥有相同数量的会员,它将只显示其中一个,并且每次您可能会得到一个不同的会员。
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)