我想要mysql代码中所有垂直和水平行的总和?
要水平求和一行,必须将所有值相加 选择5,6,7,8,9,5+6+7+8+9 要垂直求和,可以使用ROLLUP 例如:我想要mysql代码中所有垂直和水平行的总和?,mysql,Mysql,要水平求和一行,必须将所有值相加 选择5,6,7,8,9,5+6+7+8+9 要垂直求和,可以使用ROLLUP 例如: SET @a=5; SET @en=9; WITH recursive cte (k) AS( SELECT @a UNION ALL SELECT k + 1 FROM cte WHERE k < @en ) SELECT GROUP_CONCAT(CONCAT('concat(m*
SET @a=5;
SET @en=9;
WITH recursive cte (k)
AS(
SELECT @a
UNION ALL
SELECT k + 1
FROM cte WHERE k < @en
)
SELECT GROUP_CONCAT(CONCAT('concat(m*',k,')as "',k,'"')) INTO @tab FROM cte;
SET @SQL = CONCAT('WITH recursive cte1 (m)
AS (
SELECT 1
UNION ALL
SELECT m + 1
FROM cte1 WHERE m < 10
)
SELECT ',@tab,' FROM cte1;'
);
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
输出:
select a,sum(b)
from (select 1 as a,11 as b
union all
select 2,22
union all select 3,33)x
GROUP by a WITH ROLLUP;
SET @a=5;
SET @en=9;
WITH recursive cte (k,n)
AS(
SELECT @a,@a
UNION ALL
SELECT k + 1, n+k+1
FROM cte WHERE k < @en
)
SELECT CONCAT(GROUP_CONCAT(CONCAT('sum(m*',k,')as "',k,'"')),',sum(m*',MAX(n),') as sum') INTO @tab FROM cte;
SET @SQL = CONCAT('WITH recursive cte1 (m)
AS (
SELECT 1
UNION ALL
SELECT m + 1
FROM cte1 WHERE m < 10
)
SELECT ',@tab,' FROM cte1 GROUP BY m WITH ROLLUP;'
);
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
编辑:以上应用于您的代码,并对您的代码进行了一些更改!给出:
+------+--------+
| a | sum(b) |
+------+--------+
| 1 | 11 |
| 2 | 22 |
| 3 | 33 |
| NULL | 66 |
+------+--------+
运行代码后,将显示一些其他信息:
输出:选择@tab;:
输出:SELECT@SQL\G:
输出为:
SET @a=5;
SET @en=9;
WITH recursive cte (k,n)
AS(
SELECT @a,@a
UNION ALL
SELECT k + 1, n+k+1
FROM cte WHERE k < @en
)
select k,n from cte;
答案中使用了maxn,因为它是所有k值的总和。和?请添加此代码的问题。您希望输出和输入同时出现。为什么在cte表中使用@a、@a请详细说明,并添加EDIT2来解释两次@a。
+---------------------------------------------------------------------------------------------+
| @tab |
+---------------------------------------------------------------------------------------------+
| sum(m*5)as "5",sum(m*6)as "6",sum(m*7)as "7",sum(m*8)as "8",sum(m*9)as "9",sum(m*35) as sum |
+---------------------------------------------------------------------------------------------+
*************************** 1. row ***************************
@sql: WITH recursive cte1 (m)
AS (
SELECT 1
UNION ALL
SELECT m + 1
FROM cte1 WHERE m < 10
)
SELECT sum(m*5)as "5",sum(m*6)as "6",sum(m*7)as "7",sum(m*8)as "8",sum(m*9)as "9",sum(m*35) as sum FROM cte1 GROUP BY m WITH ROLLUP;
SET @a=5;
SET @en=9;
WITH recursive cte (k,n)
AS(
SELECT @a,@a
UNION ALL
SELECT k + 1, n+k+1
FROM cte WHERE k < @en
)
select k,n from cte;
+------+------+
| k | n |
+------+------+
| 5 | 5 |
| 6 | 11 |
| 7 | 18 |
| 8 | 26 |
| 9 | 35 |
+------+------+