我有一个非常简单的查询,我想在postgres中执行。 table1与table2和3具有可能的关系。
伪查询如下
select * from table1
left join table2 ON table2.table1_id = table1.id
left join table3 ON table3.table1_id = table1.id
group by table1.id
这给了我一个错误: “列“ table2.id”必须出现在GROUP BY子句中或在聚合函数中使用”, 与table3.id相同
“分组依据”的意义是什么,如果它迫使我将所有表的ID添加到“分组依据”中,从而故意破坏了分组(所有ID都是唯一的,并且没有分组)
答案 0 :(得分:1)
group by
的目的是汇总数据。 group by
中每个键组合的结果集中都有一行。
结果集中的列要么是group by
中的键,要么是聚合。此规则有一个例外,涉及按表上的唯一键或主键进行分组,并使用其他列。
在select *
中使用group by
根本不是SQL中正确使用聚合。
您似乎误解了此构造的目的。您可能真的是说order by
-可以通过order by
键对结果集进行排序,而不会更改(即总结)行数。