0

データベースにsubscriberという名前のテーブルがあり、1つは購読者ID用で、もう1つは各購読者が獲得したポイント用です。私の選択クエリ:

SELECT 1000 * ( LOYALTY_POINTS DIV 1000 ) AS  'from', 1000 * ( LOYALTY_POINTS DIV 1000 ) +1000 AS  'to', COUNT( * ) AS NUMBER FROM SUBSCRIBER GROUP BY LOYALTY_POINTS DIV 1000 

ポイントの範囲ごとにサブスクライバーの数を返す必要がありますが、残念ながら、ゼロ以外のサブスクライバーの数しか返されません。私の結果は次のとおりです。

from to NUMBER
0 1000 8
1000 2000 2
3000 4000 1
 
クエリでゼロカウントのレコードも返すようにしたい。結果は次のようになります:

from to NUMBER
0 1000 8
1000 2000 2
2000 3000 0
3000 4000 1
 

どうやってするの?前もって感謝します。

4

1 に答える 1

1

範囲を示すためにいくつかの数値を生成する必要があります

 SELECT 0 as RangeStart UNION Select 1000 UNION Select 2000 UNION Select 3000

これを結果に LEFT JOIN します。

SELECT 
    RangeStart, RangeStart + 999 as RangeEnd, RangeCount
FROM
    (SELECT 0 as RangeStart UNION Select 1000 UNION Select 2000 UNION Select 3000) range
         LEFT JOIN
    (Select LoyaltyPoints DIV 1000 as loyaltypoints, count(*) as RangeCount group by LoyaltyPoints DIV 1000 ) counts
    ON range.rangestart = counts.loyaltypoints
于 2012-09-02T08:12:18.527 に答える