我正在尝试按价格范围从我的数据库中提取产品的销售情况。
我有一个相当复杂的 SQL 查询,它有效:
SELECT 
    SUM((t.price-t.discount)*t.quantity) as totalValue, 
    MAX(t.price) as maxP, 
    t.range AS score_range,  
    COUNT(*) AS count  
        FROM 
            (SELECT products.price, 
            salesRecords.discount,
            salesRecords.quantity,  
                CASE WHEN products.price >=0 AND products.price <50 THEN  '0-49' 
                WHEN products.price >=50 AND products.price <100 THEN  '50-99' 
                WHEN products.price >=100 AND products.price <200 THEN  '100-199' 
                WHEN products.price >=200 AND products.price <350 THEN  '200-349' 
                WHEN products.price >=200 AND products.price <350 THEN  '200-349'  
                WHEN products.price >=350 AND products.price <500 THEN  '350-499' 
                WHEN products.price >=500 AND products.price <800 THEN  '500-799' 
                WHEN products.price >=800 AND products.price <1200 THEN  '800-1199' 
                WHEN products.price >=1200 AND products.price <1800 THEN  '1200-1799' 
                WHEN products.price >=1800 AND products.price <2500 THEN  '1800-2499' 
                ELSE '2500 +' END 
            AS  range  FROM salesRecords 
                LEFT JOIN products ON products.id=salesRecords.itemNo 
                ORDER BY products.price DESC)t 
    GROUP BY t.range 
    ORDER BY maxP DESC
希望你能看到这里发生了什么。我们在价格范围内对产品进行分组,对销售价值求和,因此得到如下输出:
totalValue  maxP         score_range    count   
8381    251.17       200-349        35
32522   199.00       100-199        198
22614   99.95        50-99      271
41825   49.99        0-49       2765
但是,正如您所看到的,对于这个特定的数据集,存在许多差距。
我只有score_ranges 的值200-349, 100-199,50-99, 0-49缺少 35-499、500-799 等的任何数据。这是因为这些值没有数据......这很好......除了......我将这些数据作为 JSON 注入对象到AmCharts雷达图表中,为了使数据对我的应用程序真正有意义,我需要拥有所有范围,并简单地用 填充它们zeros,所以我想要得到的是:
totalValue  maxP     score_range    count   
0       3500         2500 +             0
0       2499         1800-2499          0
0       1799         1200-1799          0
0       1199         800-1199           0
0       799          500-799            0
0       499          350-499            0
8381    251.17       200-349            35
32522   199.00       100-199            198
22614   99.95        50-99              271
41825   49.99        0-49               2765