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是最重要的,等等.
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会过滤掉它们.)