我正在尝试按价格范围从我的数据库中提取产品的销售情况。
我有一个相当复杂的 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_range
s 的值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