我的表events
有id
和venue
列。
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
是首要任务,等等。
答案 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
会过滤掉它们。)