3

と列を持つテーブルeventsidあり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

どのエラーが発生していますか: ERROR: column "e.id" must appear in the GROUP BY clause or be used in an aggregate function

私が達成しようとしている出力は次のようになります。

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

壊れた会場だけを収録。そうすれば、会場を固定すること12が最優先事項であることがわかります。

4

1 に答える 1

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それらを除外します。)

于 2012-10-16T12:02:54.900 に答える