Postgres SQL-“;我的“身份证”;必须出现在GROUP BY子句中或在聚合中使用

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

我有以下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\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