【发布时间】:2017-03-30 15:00:53
【问题描述】:
假设我有下表:
交易(id,类型)
id- 客户 ID(整数 1...n)type- 他们是什么 买了(比如“苹果”)
请注意,每一行都是指只购买给定类型的一个。
如何选择购买给定类型(如苹果)最多的客户的 ID?
我尝试 COUNT() 每个 ID 的 type = apple 的行,但我不能在该查询中使用 MAX() 来仅选择第一个 ID。
谢谢
【问题讨论】:
假设我有下表:
交易(id,类型)
id- 客户 ID(整数 1...n)type- 他们是什么 买了(比如“苹果”)
请注意,每一行都是指只购买给定类型的一个。
如何选择购买给定类型(如苹果)最多的客户的 ID?
我尝试 COUNT() 每个 ID 的 type = apple 的行,但我不能在该查询中使用 MAX() 来仅选择第一个 ID。
谢谢
【问题讨论】:
您可以首先进行查询,计算每个客户购买'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
【讨论】:
这是 SQL 101,你应该阅读group by 子句:
select id,
count(*) as count_of_apples
from transactions
where type = 'apple'
group by id
order by count(*) desc
【讨论】:
当您特别要求 Oracle 时:STATS_MODE 为您提供最常出现的价值。
select stats_mode(id)
from transactions
where type = 'apple';
【讨论】: