将mysql聚合行重组为单个行

时间:2017-06-13 10:06:19

标签: mysql sql select

考虑以下mysql表:

ID    WeightS AmountS WeightM AmountM WeightL AmountL Someothercolumnshere
 1         6       3      10       2      18       2                  ...

我需要将这些数据重组为一个支持数据库的表,其中amount列中的每一部分应该是一个结果行。例如。从前两列,WeightS和AmountS,SELECT应该产生3个结果行,每个行的权重为2 kgs(总共= 6 kgs)。所以完整的结果表应该是这样的:

Weight Someothercolumnshere
     2                ...
     2                ...
     2                ...
     5                ...
     5                ...
     9                ...
     9                ...

我甚至不知道是否有能够执行此类操作的SQL语法?我以前从来没有这样的要求。最糟糕的情况是,我必须在PHP中这样做,但我认为MYSQL更有趣:p

我已经在sqlfiddle上构建了架构,但我担心这一切都是我所拥有的。

1 个答案:

答案 0 :(得分:1)

你需要一个Tally表来执行这样的任务。根据需要创建尽可能多的行。

 Create table Tally(`N` int);
 insert into Tally( `N`) values(1),(2),(3),(4),(5);

然后

(select `ID`, `WeightS`/`AmountS`, `Someothercolumnshere`
from Catches
join Tally on Catches.`AmountS` >= Tally.`N`
 ) 
 UNION ALL
 (select `ID`, `WeightL`/`AmountL`, `Someothercolumnshere`
from Catches
join Tally on Catches.`AmountL` >= Tally.`N`
 ) 
 UNION ALL
 (select `ID`, `WeightM`/`AmountM`, `Someothercolumnshere`
from Catches
join Tally on Catches.`AmountM` >= Tally.`N`
 )