mysql 行转列并进行计算

面试题如下

甲乙丙丁四个人组团吃饭,每顿饭的金额AA,每次人数不固定,金额也不固定,如何建表,并算出一个月每个人应该出多少钱

数据表如下

CREATE TABLE `demo` (
  `日期` varchar(255) DEFAULT NULL,
  `金额` varchar(255) DEFAULT NULL,
  `用餐人数` varchar(255) DEFAULT NULL,
  `用餐人员` varchar(255) DEFAULT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

INSERT INTO `demo` VALUES ('2021-01-01', '30', '3', '甲,乙,丙', 1);
INSERT INTO `demo` VALUES ('2021-01-02', '45', '3', '乙,丙,丁', 2);
INSERT INTO `demo` VALUES ('2021-01-03', '40', '2', '甲,丁', 3);
INSERT INTO `demo` VALUES ('2021-01-04', '60', '4', '甲,乙,丙,丁', 4);

在这里插入图片描述

算出每人一共需要出多少钱

参考https://www.cnblogs.com/Yongzhouunknown/p/4844267.html

使用如下代码算出

SELECT
		a.id,
		substring_index(
			substring_index( a.用餐人员, ',', b.help_topic_id + 1 ),
			',',- 1 
		) AS NAME,
		(金额/用餐人数) AS mony,日期 
	FROM
		demo a
		JOIN mysql.help_topic b ON b.help_topic_id < (
			length( a.用餐人员 ) - length(
			REPLACE ( a.用餐人员, ',', '' ))+ 1 
		) 
	ORDER BY
		a.ID

每个人每天应该平摊的费用
在这里插入图片描述

再使用

SELECT
	sum( c.mony ),
NAME 
FROM
	(
	SELECT
		a.id,
		substring_index(
			substring_index( a.用餐人员, ',', b.help_topic_id + 1 ),
			',',- 1 
		) AS NAME,
		(金额/用餐人数) AS mony,日期 
	FROM
		demo a
		JOIN mysql.help_topic b ON b.help_topic_id < (
			length( a.用餐人员 ) - length(
			REPLACE ( a.用餐人员, ',', '' ))+ 1 
		) 
	ORDER BY
		a.ID 
	) AS c 
GROUP BY
	c.NAME

算出每个人一共需要平摊的费用
在这里插入图片描述


版权声明:本文为u011546137原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。