对多个表的计数/分组应用聚合函数
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 BY
:GROUP 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函数计算所有分组下数据变量的聚合加和值