0

我在我的数据库中有一个名为subscriber 的表,其中包含两行,一行用于订阅者ID,另一行用于每个订阅者获得的积分。我的选择查询:

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 

应该为每个点范围返回订阅者的数量,但不幸的是它只返回不同于零的订阅者数量。我的结果是:

从到 NUMBER
0 1000 8
1000 2000 2
3000 4000 1
 
我希望查询也返回计数为零的记录。结果应该是:

从到 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

并将其加入您的结果。

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 回答