我试图在MySQL中输出友好的价格表,以便导出/导入到电子表格中。让我们以水果及其价格突破为例。
这里是我所指的架构的小提琴: http://sqlfiddle.com/#!9/c526e3/4
只需:
表:水果
ID
命名
表:fruit_pricing
ID
fruit_id
MIN_QUANTITY
max_quantity
价格
执行查询时:
SELECT
F.name,
IF(FP.min_quantity = 1, FP.price, '0') as qty_1,
IF(FP.min_quantity = 10, FP.price, '0') as qty_10,
IF(FP.min_quantity = 25, FP.price, '0') as qty_25,
IF(FP.min_quantity = 50, FP.price, '0') as qty_50,
IF(FP.min_quantity = 100, FP.price, '0') as qty_100
FROM Fruit F
LEFT JOIN FruitPricing FP ON FP.fruit_id = F.id
它显示如下结果: 我想要做的是将水果名称分组,因此只有三行:Apple,Grape和Orange。然后,我希望用适当的数量替换所有0值。我试图获得与此屏幕截图中的电子表格相同的输出:
有没有很好的技巧来完成这个?我不确定这个特定问题的sql-tech-speak,因此很难找到答案。如果可以的话,我很乐意更新我的问题主题,而且有人会有更好的建议。
答案 0 :(得分:1)
SELECT f.name
, SUM(CASE WHEN fp.min_quantity = 1 THEN fp.price ELSE 0 END) qty_1
, SUM(CASE WHEN fp.min_quantity = 10 THEN fp.price ELSE 0 END) qty_10
, SUM(CASE WHEN fp.min_quantity = 25 THEN fp.price ELSE 0 END) qty_25
, SUM(CASE WHEN fp.min_quantity = 50 THEN fp.price ELSE 0 END) qty_50
, SUM(CASE WHEN fp.min_quantity = 100 THEN fp.price ELSE 0 END) qty_100
FROM fruit f
LEFT
JOIN fruitpricing fp
ON fp.fruit_id = f.id
GROUP
BY name;
虽然,如果是我,我可能只是执行以下操作,并处理表示层中任何剩余的显示问题......
SELECT f.name
, fp.min_quantity
, SUM(fp.price) qty
FROM fruit f
LEFT
JOIN fruitpricing fp
ON fp.fruit_id = f.id
GROUP
BY name
, min_quantity;