我想要mysql代码中所有垂直和水平行的总和?

我想要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*

要水平求和一行,必须将所有值相加

选择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*',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 |
+------+------+