Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-最小值和计数的组合_Sql_Oracle_Aggregate Functions_Oracle Sqldeveloper - Fatal编程技术网

SQL-最小值和计数的组合

SQL-最小值和计数的组合,sql,oracle,aggregate-functions,oracle-sqldeveloper,Sql,Oracle,Aggregate Functions,Oracle Sqldeveloper,这是在Oracle数据库中。假设我有下表A: column1 column2 id1 a id2 a id3 a id4 b id5 b id6 c 因此,我希望sql所做的是: 首先计数有三个A,两个B和一个c,然后根据计数返回这些计数的最小值,在这种情况下是1(因为我们只有一个c) 这可以通过使用MIN和COUNT的组合来实现吗?尝试以下方法: SELECT MIN(Count) as MinVal FROM (SE

这是在Oracle数据库中。假设我有下表A:

column1 column2
id1       a
id2       a 
id3       a
id4       b
id5       b
id6       c
因此,我希望sql所做的是: 首先计数有三个A,两个B和一个c,然后根据计数返回这些计数的最小值,在这种情况下是1(因为我们只有一个c)

这可以通过使用MIN和COUNT的组合来实现吗?

尝试以下方法:

SELECT MIN(Count) as MinVal
FROM
(SELECT column2,COUNT(column2) as Count
FROM TableA
GROUP BY column2) T
说明:

内部查询为表中
column2
的每个值选择
column2
的计数。然后使用外部查询选择最小计数

SELECT MIN(cnt)
FROM   (SELECT   COUNT(*) AS cnt
        FROM     my_table
        GROUP BY column2)
编辑:
正如ElmoVanKielmo所指出的,提供解决方案而不加以解释是毫无意义的。

内部查询按
column2
值对数据进行分组,并返回每个值的行数。外部查询将这些数据视为一组数字,并返回其中的最小值。

如果使用Oracle 12,则无需子查询即可执行此操作:

select count(*) as cnt
from table t
group by cnt
order by cnt asc
fetch first 1 row only;

对于那些熟悉MySQL或Postgres的人来说,
仅获取前1行
相当于
限制
,并允许您在不使用子查询的情况下限制输出行的数量。

在Oracle中,您可以直接这样做;按组计数,并在结果上使用MIN返回一行所需值

select min(count(*))
from tablea
group by column1;

这应该对你有用

SELECT *
FROM(
SELECT Column2, COUNT(Column1)
FROM TableA
GROUP BY Column2
ORDER BY COUNT(Column1))
WHERE Rownum = 1

@Gordon Linoff:这在其他dbms中无效,但在Oracle中有效。您可以按组进行聚合,然后对这些结果进行另一次聚合,如上图所示,无需子查询(尽管我发现子查询通常可读性更好)。这一定是Oracle 11g中的新功能。我在Oracle10数据库上测试了它,得到了预期的错误。但是,它确实适用于SQL FIDLE()。@Gordon Linoff:它也适用于我的Oracle 10g Enterprise 10.2.0.4.0。因此,它也可能是标准版和企业版之间的差异。(我认为这很奇怪。)评论:对这个解决方案的一些描述是值得赞赏的。