【问题标题】: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 您需要将答案标记为已接受。如果您对答案有任何疑虑。然后,让他们知道。这完全是对帮助你的人的不尊重。

标签: sql hsqldb


【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      相关资源
      最近更新 更多