在类似电子表格的列中显示MySQL定价图表

时间:2016-07-25 21:00:49

标签: mysql spreadsheet

我试图在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

它显示如下结果: MySQL result set for price breaks 我想要做的是将水果名称分组,因此只有三行:Apple,Grape和Orange。然后,我希望用适当的数量替换所有0值。我试图获得与此屏幕截图中的电子表格相同的输出:

Spreadsheet screenshot for price breaks

有没有很好的技巧来完成这个?我不确定这个特定问题的sql-tech-speak,因此很难找到答案。如果可以的话,我很乐意更新我的问题主题,而且有人会有更好的建议。

1 个答案:

答案 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;