1

COUNT(*)=0 を列に表示するのに問題があります。この質問は、ここである程度解決されています。このクエリでカウント値が 0 の行も返すようにするにはどうすればよいですか?

...しかし、解決策を複数の異なるカテゴリに一般化するのに苦労しています。これが私の状況です。駐車場の場所には 11 の異なるカテゴリがあり、所属には 4 つの異なるカテゴリがあります。


    # 回答者から DISTINCT parking_location を選択します。
     駐車場の場所
    ------------------
     路上無料
     都市のガレージ
     UCロット
     rpp ビジター
     路外無料
     他の
     どこにも
     その他有料
     メートル
     無効
     rpp
    (11行)

    # 回答者から明確な所属を選択します。
     所属
    -------------
     学部
     大学生
     卒業生
     スタッフ
    (4行)

私の大学生の回答者は誰も身障者用駐車場を使用していないので、parking_location で数えようとすると、10 行しか返されません。

    SELECT parking_location,COUNT(*) FROM 回答者 WHERE affiliation='undergrad' GROUP BY parking_location;
     駐車場所 | カウント
    ------+----------------------
     路上無料 | 2
     メートル | 25
     都市ガレージ | 5
     rpp | 21
     どこにもない | 1012
     UCロット | 33
     rpp ビジター | 10
     路外無料 | 10
     その他 | 10
     その他有料 | 12
    (10行)

問題ない。前述のリンクは、0 を表示する方法を示しています。

    ths=# WITH c as (回答者から DISTINCT parking_location を選択),
    ths-# r AS (SELECT affiliation, parking_location, COUNT(*) AS count FROM Answers WHERE affiliation='undergrad' GROUP BY 1,2)
    ths-# SELECT c.parking_location, COALESCE(r.count, 0) AS カウント FROM c
    ths-# LEFT JOIN r ON c.parking_location = r.parking_location
    ths-# ORDER BY parking_location;
     駐車場所 | カウント
    ------+----------------------
     どこにもない | 1012
     メートル | 25
     rpp | 21
     rpp ビジター | 10
     路上無料 | 2
     UCロット | 33
     路外無料 | 10
     都市ガレージ | 5
     その他有料 | 12
     無効 | 0
     その他 | 10
    (11行)

しかし今、学部生だけでなく、すべての所属を表に示したいと思います。さらに、結果のテーブルを最初に所属、次にparking_locationで並べたいと思います。上記の WHERE 句を削除できると思ったのですが、学部生の無効な列が消えてしまいました。

    ths=# WITH c as (回答者から DISTINCT parking_location を選択),
    ths-# r AS (SELECT affiliation, parking_location, COUNT(*) AS count FROM Answers GROUP BY affiliation,parking_location)
    ths-# SELECT r.affiliation, c.parking_location, COALESCE(r.count, 0) FROM c
    ths-# LEFT JOIN r ON c.parking_location = r.parking_location
    ths-# ORDER BY affiliation,parking_location;
     所属 | 駐車場所 | 合体する
    ---+------------------+----------------------
    
     スタッフ | 都市ガレージ | 34
     スタッフ | その他有料 | 50
     スタッフ | 無効 | 18
     スタッフ | その他 | 61
     学部生 | どこにもない | 1012
     学部生 | メートル | 25
     学部生 | rpp | 21
     学部生 | rpp ビジター | 10
     学部生 | 路上無料 | 2
     学部生 | UCロット | 33
     学部生 | 路外無料 | 10
     学部生 | 都市ガレージ | 5
     学部生 | その他有料 | 12
     学部生 | その他 | 10
     卒業生 | どこにもない | 1113
     卒業生 | メートル | 96
     卒業生 | rpp | 31
    

何か助けはありますか?

4

1 に答える 1

1

次のようなものを試してください:

WITH all_parking_locations as (SELECT DISTINCT parking_location 
                               FROM respondents),

     all_affiliations as  (SELECT DISTINCT affiliation 
                           FROM respondents),

     all_counts as (SELECT affiliation, parking_location, COUNT(*) AS count 
                    FROM respondents 
                    GROUP BY affiliation, parking_location)

SELECT aa.affiliation, apl.parking_location, COALESCE(ac.count,0) as count
FROM all_affiliations aa
CROSS JOIN all_parking_locations apl
LEFT JOIN all_counts ac ON ac.affiliation = aa.affiliation
                       AND ac.parking_location = apl.parking_location
ORDER BY aa.affiliation, apl.parking_location
于 2013-02-15T20:24:32.373 に答える