在类似电子表格的列中显示 MySQL 定价图表
Display MySQL Pricing Chart in Spreadsheet-like Columns
我正在尝试将 MySQL 中 export/import 的友好价格 table 输出到电子表格中。以水果及其价格区间为例
这是我所指架构的 fiddle:
http://sqlfiddle.com/#!9/c526e3/4
简单地:
Table: 水果
编号
名字
Table: fruit_pricing
编号
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,因此很难找到答案。如果可以的话,我很乐意更新我的问题主题,有人对此有更好的建议。
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;
我正在尝试将 MySQL 中 export/import 的友好价格 table 输出到电子表格中。以水果及其价格区间为例
这是我所指架构的 fiddle: http://sqlfiddle.com/#!9/c526e3/4
简单地:
Table: 水果
编号
名字
Table: fruit_pricing
编号
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
它显示的结果是这样的:
有什么好的技巧可以做到这一点吗?我不确定这个特定问题的 sql-tech-speak,因此很难找到答案。如果可以的话,我很乐意更新我的问题主题,有人对此有更好的建议。
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;