如何在 Oracle SQL 中使用 MAX() 和 COUNT()?

Posted

技术标签:

【中文标题】如何在 Oracle SQL 中使用 MAX() 和 COUNT()?【英文标题】:How to use MAX() and COUNT() in Oracle SQL? 【发布时间】:2017-03-30 15:00:53 【问题描述】:

假设我有下表:

交易(id,类型)

id - 客户 ID(整数 1...n)type - 他们是什么 买了(比如“苹果”)

请注意,每一行都是指只购买给定类型的一个。

如何选择购买给定类型(如苹果)最多的客户的 ID?

我尝试 COUNT() 每个 ID 的 type = apple 的行,但我不能在该查询中使用 MAX() 来仅选择第一个 ID。

谢谢

【问题讨论】:

【参考方案1】:

您可以首先进行查询,计算每个客户购买'apple' 的次数,使用:

SELECT id,COUNT(*) AS total
FROM transactions
WHERE type = 'apple'
GROUP BY id

现在我们只需要在DESC结束顺序中ORDER BY那个total,并返回first row with FETCH FIRST n ROWS ONLY,比如:

SELECT id,COUNT(*) AS total
FROM transactions
WHERE type = 'apple'
GROUP BY id
ORDER BY total DESC
FETCH FIRST 1 ROWS ONLY

【讨论】:

【参考方案2】:

这是 SQL 101,你应该阅读group by 子句:

select id,
    count(*) as count_of_apples
from transactions
where type = 'apple'
group by id
order by count(*) desc

【讨论】:

【参考方案3】:

当您特别要求 Oracle 时:STATS_MODE 为您提供最常出现的价值。

select stats_mode(id)
from transactions
where type = 'apple';

【讨论】:

以上是关于如何在 Oracle SQL 中使用 MAX() 和 COUNT()?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 oracle sql 中使用 max on sum?

如何根据以下数据在 oracle SQL 上使用 max 函数? [关闭]

如何在 Oracle SQL 中不使用 distinct 选择从多个 max(case when) 派生的唯一行

如何通过 Oracle 中的 SQL 查询找到每个 id 的 TOP/MAX 值?

oracle 形式:pl/sql 中 where 子句中的 max 子句

在SQL中,如何查询某一字段中最大值的数据