Postgres中的多表计数()

lyn*_*nks 3 sql postgresql group-by count

我有一个表,events其中有id和venue列.

该events.venue列与列匹配venues.id,这是一个相当典型且简单的设置.

一些场地被"打破",因为它们缺少重要的信息,例如geo_lat.我正在尝试创建一个破坏场地的优先级列表,其中最重要的是在顶部venue托管events,以便我们知道哪些venues是最重要的修复.

Myquery到目前为止看起来像;

select x.venue_id as id, count(x.venue_id) as events 
from (
    select * 
    from events e, venues v 
    where e.venue=v.id and v.geo_lat is null 
    group by e.venue
) as x order by events desc
Run Code Online (Sandbox Code Playgroud)

哪个给出错误: ERROR:列"e.id"必须出现在GROUP BY子句中或用于聚合函数

我试图实现的输出看起来像;

venue.id | events
---------|-------
      12 |    219
     214 |    141
      36 |     41
    1834 |     22
     931 |      4
Run Code Online (Sandbox Code Playgroud)

只包含破碎的场地.这样,我知道固定场地12是最重要的,等等.

Mat*_*lie 5

SELECT
  venue.id,
  COUNT(events.venue)    AS event_count
FROM
  venues
LEFT JOIN
  events
    ON events.venue = venue.id
WHERE
  venue.geo_lat IS NULL
GROUP BY
  venue.id
ORDER BY
  COUNT(events.venue) DESC
Run Code Online (Sandbox Code Playgroud)

将LEFT JOIN允许没有事件的场所. (INNER JOIN会过滤掉它们.)