对多个表的计数/分组应用聚合函数

Posted

技术标签:

【中文标题】对多个表的计数/分组应用聚合函数【英文标题】:Apply aggregates function on count / group by on multiple tables 【发布时间】:2017-10-02 07:08:02 【问题描述】:

我有两张桌子

table1(水手):

id_sailor   name 
1       Barondeau   
2       Vighetti    

table2(航程):

id_ voyage     boat       id_sailor
1                Juliette         1
2                Juliette         1
3               La belle          2
4               La Belle          1

如何制作这个新表:

n 是特定船上水手的航行次数 -

   boat     name      n     
   Juliette Barondeau 2
   La Belle Barondeau 1
   La Belle Vighetti  1

我尝试了什么:

  select "table2"."boat", "table1"."name", count("table2"."boat" ) as "n"
  from "table1", "table2" 
  where "table1"."id_sailor" = "table2"."id_sailor"
  group by "table2"."name"
  ;

在 hsqldb 1.8 中,出现此错误“不在聚合函数或 group by 子句中:1b6128f...”

【问题讨论】:

n 是特定船上水手的航行次数 好的@Wilcar 明白了 附注:您应该有一个单独的船桌。否则,示例数据中的 'La belle' 与 'La Belle'` 之类的简单错字已经可能导致错误结果。 至于GROUP BYGROUP BY xyz 表示每个 xyz 一个结果行。因此,如果您希望每艘船和水手有一个结果行,则必须按船和水手分组。 @Wilcar 您需要将答案标记为已接受。如果您对答案有任何疑虑。然后,让他们知道。这完全是对帮助你的人的不尊重。 【参考方案1】:

您需要在您的 GROUP BY 子句中添加 group by "table2"."boat" 其余看起来没问题。

 group by "table2"."boat","table2"."name"

而不是

group by "table2"."name"

【讨论】:

【参考方案2】:

似乎是简单的基于“分组依据”的查询

select
      v.boat, s.name, count(*) n
from voyages v
innner join sailors s on v.id_sailor = s.id_sailor   
group by
      v.boat, s.name

这里要注意的重要一点是,所有未使用聚合函数的选定列例如 COUNT()* 应列在 group by 子句中。

【讨论】:

我不是很有经验 好吧,你帮我找出我的错误 非常年轻?或者只是对 SQL 不是很有经验? :)【参考方案3】:

只需要通过table2.boat添加组。

select table2.boat, table1.name, count(table2.boat) as n
from table1, table2 
where table1.id_sailor = table2.id_sailor
group by table1.name , table2.boat;

【讨论】:

以上是关于对多个表的计数/分组应用聚合函数的主要内容,如果未能解决你的问题,请参考以下文章

solrcloud jsonfacet分组聚合 unique计数不准确

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用sum函数计算所有分组下数据变量的聚合加和值

如何在 pyspark 中对需要在聚合中聚合的分组数据应用窗口函数?

聚合函数数据分组