MySQL查询出的一条数据拆分成多条

需求:

有如下表格

现在需要汇总出所有的score,将汇总结果平均分给:张三、李四、王五这三个人。SQL如下:

select tmp_user.surname 姓,tmp_user.personal_name 名, tmp_num.num 分数 
	from (select convert(sum(score)/3,decimal(15,2)) num from student) tmp_num,
		(SELECT '张' surname,'三' personal_name UNION SELECT '李' surname,'四' personal_name UNION SELECT '王' surname,'五' personal_name) tmp_user

结果如下:

其中

你可以使用MySQL的日期函数和一些技巧来将一条记录按日期拆分多条记录。以下是一种方法: 假设你有一个表`my_table`,其中包含日期和数量两个列,你想按日期将每个数量值拆分单独的记录。 首先,你可以使用`DATE_FORMAT`函数将日期列格式化为只包含年月日的字符串,并使用`CAST`函数将数量列转换为整数类型。然后,你可以使用`GENERATE_SERIES`函数生一个日期序列,该序列包含在查询中指定的日期范围内的所有日期。最后,你可以将生的日期序列与原始表连接,并使用`VALUES`子句将每个日期和数量组合单独的记录。 下面是一条可以实现此功能的SQL查询: ``` SELECT DATE_FORMAT(dates.date, '%Y-%m-%d') AS date, CAST(my_table.quantity AS INT) AS quantity FROM ( SELECT DATE_ADD('2022-01-01', INTERVAL seq.seq DAY) AS date FROM ( SELECT (t4.n * 1 + t3.n * 10 + t2.n * 100 + t1.n * 1000) AS seq 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) AS t1 CROSS 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) AS t2 CROSS 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) AS t3 CROSS 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) AS t4 ) AS seq WHERE seq.seq BETWEEN 0 AND DATEDIFF('2022-01-31', '2022-01-01') ) AS dates INNER JOIN my_table ON DATE_FORMAT(my_table.date, '%Y-%m-%d') = dates.date ORDER BY dates.date; ``` 该查询将`my_table`表中的所有日期值拆分一个序列,并使用`INNER JOIN`连接每个日期值与原始表中的记录。然后,它将每个日期值和相应的数量值组合单独的记录。 需要注意的是,该查询中的日期范围和格式化字符串应该与你的实际情况相匹配。此外,`GENERATE_SERIES`函数在MySQL中并不存在,我们使用了一些技巧来实现这个函数的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值