【问题标题】:join and group by in SQL在 SQL 中加入和分组
【发布时间】:2017-03-23 16:59:55
【问题描述】:

我有两个要加入的表,但我知道使用CREATE VIEW 更有效。这就是我所拥有的:

CREATE OR REPLACE VIEW view0_joinedTablesGrouped 
AS
Select table1.*,table2.*
FROM table1
inner join table2 on table1.col = 
table2.matchingcol
group by table2.matchingcol;

导致以下错误:

ERROR:  column "table1.col" must appear in the GROUP BY clause or be 
used in an aggregate function
LINE 3: Select table.*,table2.*

【问题讨论】:

  • 该错误与视图创建无关。有必要聚合其他列。你没有解释为什么要分组。
  • 国家、地区、地区等格式的数据地理区域。我想创建按国家、地区等汇总的视图。
  • 视图的效率高或低。这只是一种隐藏潜在复杂查询并使其结果看起来像表格的方法。每次访问视图时,都会重新运行查询。这有点像别名。此外,为了提供帮助,我们需要更多地了解您的表格结构和您想要的结果。

标签: sql postgresql join group-by


【解决方案1】:

Group By 无法执行您想要执行的操作。

考虑一个简单的表格:

Name Age
-------
Ann  10
Bill 10
Chris 11

如果您尝试按年龄分组:

Select * from Table group by Age

您希望在Name 列中出现Age=10 的具体内容是什么?安,或者比尔,或者两者兼有,或者两者都不是,或者......? 没有好的答案。

因此,当您 group by 时,输出中的每一列都必须是 aggregate——这意味着组中每一行的函数。

所以这些是有效的:

Select Age, Count(*) from Table group by Age
Select Age, Max( Length(Name)) from Table group by Age
Select Age, Max(Name) from Table group by Age

但这是不可能的,而且是无效的:

Select Age,Name from Table group by Age

所以你的select * 是问题所在——你不能只选择列值,因为当你group by 时,每个输出行都有一个完整的列值,你可以' t 将所有这些值填充到一行的一列中。

关于使用视图,@systemjack 的评论是正确的。

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多