与计数、最大值和分组依据相关

Posted

技术标签:

【中文标题】与计数、最大值和分组依据相关【英文标题】:Related with count, max and group by 【发布时间】:2018-02-27 15:04:55 【问题描述】:

这是我的桌子。我试图根据他拥有的最大水果数量来获得不同的人不同的水果。

persons | fruitsDavid appleDavid appleDavid appleDavid bananaDavid orangeSam appleSam bananaSam orangeSam orangeSam orangeSam orangeTom appleTom bananaTom bananaTom orange

我想看到我的结果:

persons | fruitsDavid appleSam orangeTom 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

【讨论】:

没有概率 :) .

以上是关于与计数、最大值和分组依据相关的主要内容,如果未能解决你的问题,请参考以下文章

SQL 优化(分组依据和最大值)

具有内部联接、多个分组依据和最小最大值的 Linq 查询

Python - 熊猫,分组和最大计数

无效的请求“分组依据”(oracle)

sql如何求分组计数之后计数的最大值

即使字段包含在分组依据列表中,分组依据或聚合错误