我正在尝试在 PostgreSQL 中编写查询,但我有点沮丧,因为它适用于其他数据库引擎。我需要从给定的连接表中选择前 5 个用户,如下所示:

SELECT users.*,
       COUNT(deals.id) AS num_deals
FROM users, deals
WHERE deals.users_id = users.id
GROUP BY users.id
ORDER BY num_deals LIMIT 5;

I need the top 5 users. This code works in sqlite, mysql, etc, yet PostgreSQL refuses to select additional fields that aren't used in aggregate functions. I'm getting the following error:

PGError: ERROR:  column "users.id" must appear in the GROUP BY clause or be used in an aggregate function

我怎样才能在 PostgreSQL 中做到这一点?

最佳答案

你可以试试:

SELECT users.*, a.num_deals FROM users, (
    SELECT deal.id as dealid, COUNT(deals.id) AS num_deals
    FROM deals
    GROUP BY deal.id
) a where users.id = a.dealid
ORDER BY a.num_deals DESC
LIMIT 5

关于database - postgreSQL 选择聚合函数中未使用的其他列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4755518/

10-11 03:18
查看更多