SQL - MIN和COUNT的组合

时间:2014-04-25 16:23:52

标签: sql oracle aggregate-functions oracle-sqldeveloper

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

column1 column2
id1       a
id2       a 
id3       a
id4       b
id5       b
id6       c

所以我想要sql做的是: 首先计算有三个As和两个b和一个c,然后基于计数返回我这些计数的最小数量,在这种情况下是1(因为我们只有一个c)

这可以通过使用MIN和COUNT的组合以某种方式实现吗?

5 个答案:

答案 0 :(得分:1)

在Oracle中,您可以直接执行此操作;每组计数并在结果上使用MIN以获得具有所需值的一行。

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

答案 1 :(得分:0)

试试这个:

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

<强>解释

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

答案 2 :(得分:0)

SELECT MIN(cnt)
FROM   (SELECT   COUNT(*) AS cnt
        FROM     my_table
        GROUP BY column2)

修改
正如ElmoVanKielmo所指出的那样,在没有解释的情况下提供解决方案毫无意义 内部查询按column2值对数据进行分组,并返回每个值的行数。外部查询将这些视为一堆数字,并返回其中的最小值。

答案 3 :(得分:0)

如果您使用的是Oracle 12,则可以在没有子查询的情况下执行此操作:

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

对于那些熟悉MySQL或Postgres的人来说,fetch first 1 row only等同于limit,并且允许您在不使用子查询的情况下限制输出行的数量。

答案 4 :(得分:0)

这应该对你有用

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