Postgres SQL-“;我的“身份证”;必须出现在GROUP BY子句中或在聚合中使用
我有以下sql:Postgres SQL-“;我的“身份证”;必须出现在GROUP BY子句中或在聚合中使用,sql,postgresql,Sql,Postgresql,我有以下sql: select my_id, count(*) as total_count from (select col1, col2 from tableA union select col1, col2 from tableB ) as BothTable order by my_id 获取此错误列“BothTable.my_id”必须出现在GROUP BY子句中或用于聚合函数中 我如何解决这个问题 COUNT(*)将所有行聚合在一起,因此您将无法获得my
select my_id, count(*) as total_count
from (select col1, col2 from tableA
union
select col1, col2 from tableB
) as BothTable
order by my_id
获取此错误列“BothTable.my_id”必须出现在GROUP BY子句中或用于聚合函数中
我如何解决这个问题 COUNT(*)将所有行聚合在一起,因此您将无法获得my\u id
如果按my_id对进行分组
,则生成的表将为每个my_id
各有一行,并对具有相同值的唯一行数进行计数
即
如果你真的只想要总数SELECT count(*)
而不是SELECT my_id,count(*)
你的中缺少了一个。这是一个打字错误,现在问题已经解决了。错误信息非常清楚,你在ORDER BY
之前缺少了一个组my_id
,col2是bothTable中的列。除了col1和col2不是我的\u ID,所以有两个问题1)我的\u ID在BothTable中不存在。2) 使用聚合时,必须按所有非聚合列分组,否则引擎将不知道为非聚合列返回什么值。即使没有ORDER by
,op编写的查询也无法工作。为什么它在第一次查询中选择my_ID 5?它是随机的吗?它将获取聚合函数访问的最后一行的值。您将mysql与Postgresql混淆了。在后一种情况下,查询将不会运行,我明白了,谢谢这一点。到那时,我将从我的回答中删除关于秩序的问题。
my_id, COUNT(*)
<?>, 20
my_id, COUNT(*)
1, 1
2, 10
3, 3
4, 1
5, 5