根据`sum`列将一行分成多行

时间:2019-01-01 04:32:11

标签: mysql laravel-5.6

schema

track_play_counts中有一列名为play_count的列,该列是各个track_play_count的总和。如何将play_count列拆分为仅将play_count值设为1的不同行?该表包含数千个数据,因此我无法手动执行。

例如,如果play_count为10,则应该有10行带有1 play_count。如何使用mysql或laravel实现它?

1 个答案:

答案 0 :(得分:1)

您可以使用此查询创建一个新表,其中每个单独的track_play_count都有一行。

CREATE TABLE new_play_counts (id INT AUTO_INCREMENT PRIMARY KEY) AS
SELECT track_id, 1 AS play_count
FROM (SELECT n10.n*10 + n.n AS num
      FROM (SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3
                          UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
                          UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) n10
      JOIN (SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3
                          UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
                          UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) n
      ) numbers
JOIN track_play_counts p ON p.play_count > numbers.num
ORDER BY p.Id, numbers.num

Demo on dbfiddle

注释

  1. 我假设play_count的最大值为99,如果大于该最大值,则需要通过numbers再加上一位数字来增加JOIN表的大小对此。
  2. 我还假设您要为新表中的每一行赋予一个唯一的ID值,否则,您将从查询的第一行中删除(id INT AUTO_INCREMENT PRIMARY KEY)并更改{{1} }到SELECT