0

我正在尝试在我的数据库上执行此查询,该数据库根据第三个表的结果查询 2 个表。

SELECT *
FROM   ads_user AS u
       INNER JOIN ads_medium AS m
               ON u.id = m.owner_id
WHERE m.id IN (SELECT medium_id,
                                  Count(*) AS count
                           FROM   ads_click
                           WHERE  time > '2017-01-01'
                           GROUP  BY medium_id
                           ORDER  BY count DESC
                           LIMIT  100);

如您所见,我在子查询中使用了两列,该count列是整个查询正常工作所必需的。不幸的是 PostgreSql 抛出subquery has too many columns错误。

有什么解决方法吗?

4

1 回答 1

1

只需将计数删除为选定列并将 (*) 添加到 order by。因此:

SELECT *
FROM   ads_user AS u
       INNER JOIN ads_medium AS m
               ON u.id = m.owner_id
WHERE m.id IN (SELECT medium_id
                           FROM   ads_click
                           WHERE  time > '2017-01-01'
                           GROUP  BY medium_id
                           ORDER  BY count(*) DESC
                           LIMIT  100);

Postgres 抱怨是因为您的 IN 引用了两列,而它应该只有一列。按顺序排列 Count(*) 是完全可以的。

于 2017-08-26T06:02:56.180 回答