与计数、最大值和分组依据相关
Posted
技术标签:
【中文标题】与计数、最大值和分组依据相关【英文标题】:Related with count, max and group by 【发布时间】:2018-02-27 15:04:55 【问题描述】:这是我的桌子。我试图根据他拥有的最大水果数量来获得不同的人不同的水果。
persons | fruits
David apple
David apple
David apple
David banana
David orange
Sam apple
Sam banana
Sam orange
Sam orange
Sam orange
Sam orange
Tom apple
Tom banana
Tom banana
Tom orange
我想看到我的结果:
persons | fruits
David apple
Sam orange
Tom banana
我尝试使用 count 和 max 函数以及 group by,但无法获得正确的结果。
【问题讨论】:
请从您的标签和描述中删除 postgres redshiftpostgres! 【参考方案1】:你可以使用distinct on
:
select distinct on (person) person, fruit
from (select person, fruit, count(*) as cnt
from personfruits pf
group by person, fruit
) pf
order by person, cnt desc;
您也可以在没有子查询的情况下编写此代码:
select distinct on (person) person, fruit
from personfruits pf
group by person, fruit
order by person, count(*) desc;
但是,对于不太熟悉 distinct on
的人来说,这有点难以理解。
【讨论】:
错误:不支持 SELECT DISTINCT ON 位置:文件:/home/ec2-user/padb/src/pg/src/backend/parser/parser_gram.y,例程:isPufnError,行:13328服务器 SQLState: 0A000 我收到了上述错误。抱歉,我正在查询 redshift 数据库。由于和postgres类似,所以我的标题是postgres。是因为红移吗? @LokTam 。 . .是的,问题似乎是 RedSit。【参考方案2】:据我了解,您想查看每个人最常出现的水果。如果这是正确的,这应该可以工作
SELECT persons, fruits
FROM (
SELECT
persons,
fruits,
RANK() OVER(PARTITION BY persons ORDER BY FruitCount DESC) AS FruitRank -- Rank fruit count per person
FROM (
SELECT
persons,
fruits,
count(*) FruitCount -- get # rows per (person, fruit) combination
FROM MyTable
GROUP BY persons, fruits
) src
) src
WHERE FruitRank = 1 -- Return fruit with largest FruitCount, per person
【讨论】:
没有概率 :) .以上是关于与计数、最大值和分组依据相关的主要内容,如果未能解决你的问题,请参考以下文章