Postgres中的多表计数()

时间:2012-10-16 11:58:47

标签: sql postgresql count group-by

我的表eventsidvenue列。

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

有些场地“破损”,因为它们缺少重要的信息,例如geo_lat。我正在尝试创建一个破坏场地的优先级列表,其中venue位于最顶层events,因此我们知道哪个venues最重要。< / p>

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

哪个是错误的: 错误:列“e.id”必须出现在GROUP BY子句中或用于聚合函数

我想要实现的输出看起来像;

venue.id | events
---------|-------
      12 |    219
     214 |    141
      36 |     41
    1834 |     22
     931 |      4

仅包含损坏的场地。这样,我知道修复场地12是首要任务,等等。

1 个答案:

答案 0 :(得分: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

LEFT JOIN允许没有事件的场地。 INNER JOIN会过滤掉它们。)