mysql的行求和、列求和是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的行求和、列求和是啥?相关的知识,希望对你有一定的参考价值。

分别求出d01、d02、d03......d31列的和;

SELECT count(d01),count(d02),count(d03).....count(d31) FROM m201201;

分别求出3006、3008、3010、3016、3034每一行中d01——d31之间记录的和

SELECT (d01+d02+d03+....+d31) as d_all FROM m201201 WHERE name IN('3006','3008','3010','3016','3034');

mysql是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

由于其社区版的性能卓越,搭配 php 和 Apache 可组成良好的开发环境。

参考技术A

SUM函数的语法是: SELECT        SUM(expression )         FROM     tables     WHERE    predicates;

表达式可以是一个数值字段或公式。

SELECT 列1+ 列2 + 列3 …… + 列N  AS Total  FROM   表 

或者select SUM(group_type+group_num_day+group_num_period+prize_pkg_id_owner) as total from ACT_GroupConfig;


参考技术B

分别求出d01、d02、d03......d31列的和; 
SELECT count(d01),count(d02),count(d03).....count(d31) FROM m201201;

分别求出3006、3008、3010、3016、3034每一行中d01——d31之间记录的和 
SELECT (d01+d02+d03+....+d31) as d_all FROM m201201 WHERE name IN('3006','3008','3010','3016','3034');

如何对来自不同表MySQL的两列求和

【中文标题】如何对来自不同表MySQL的两列求和【英文标题】:how to sum two columns from different tables MySQL 【发布时间】:2021-07-28 20:25:08 【问题描述】:

我需要将位于不同表中并按 session_id 分组的两个不同列中的数据相加.....

我需要对按 session_id 分组的花费点数 + 价格点数列求和

这是我希望得到的结果

我已尝试使用此查询,但我只设法对数据进行分组,但无法通过 session_id 对其进行汇总

SELECT session_details.session_id,SUM(session_details.spent_points) AS total_sum_session FROM session_details WHERE session_details.session_id IN ("-Meagevy6y9ukbmFXvB7","-Meak6dG9iqvHWfAGQvy") GROUP BY session_details.session_id UNION SELECT template_sales.session_id, SUM(template_sales.price_points) AS total_sum_sales FROM template_sales WHERE template_sales.session_id IN ("-Meagevy6y9ukbmFXvB7","-Meak6dG9iqvHWfAGQvy") GROUP BY template_sales.session_id 

【问题讨论】:

联合,然后求和 【参考方案1】:

首先使用UNION ALL 从您想要的 2 个表中获取所有行,然后聚合:

SELECT session_id, SUM(points) AS total_points
FROM (
  SELECT session_id, spent_points AS points
  FROM session_details 
  WHERE session_id IN ("-Meagevy6y9ukbmFXvB7","-Meak6dG9iqvHWfAGQvy") 
  UNION ALL
  SELECT session_id, price_points
  FROM template_sales 
  WHERE session_id IN ("-Meagevy6y9ukbmFXvB7","-Meak6dG9iqvHWfAGQvy") 
) t
GROUP BY session_id

【讨论】:

【参考方案2】:

你快到了:

WITH union_rows (session_id, points) AS (
        SELECT session_details.session_id, session_details.spent_points
          FROM session_details
         WHERE session_details.session_id IN ('-Meagevy6y9ukbmFXvB7','-Meak6dG9iqvHWfAGQvy')
         UNION ALL
        SELECT template_sales.session_id, template_sales.price_points
          FROM template_sales
         WHERE template_sales.session_id IN ('-Meagevy6y9ukbmFXvB7','-Meak6dG9iqvHWfAGQvy')
     )
SELECT session_id
     , SUM(points) AS total_sum
  FROM union_rows
 GROUP BY session_id
;

如果您有旧版本的 MySQL,但不支持 WITH clause,请改用派生表。

session_id 过滤器可以在 CTE 术语之外完成,但您也可以携带所有其他行,直到过滤器被处理。

【讨论】:

【参考方案3】:

也许您可以使用 session_id 在这两个表之间进行 JOIN。 之后,您可以将这两个属性相加。

会是这样的:

SELECT session_details.session_id,SUM(SD.SPENT_POINTS + TSS.PRICE_POINTS ) AS total_sum_session 
FROM session_details SD
JOIN template_sales.session_id TSS ON SD.SESSION_ID = TSS.SESSION_ID
WHERE SD.session_id IN ("-Meagevy6y9ukbmFXvB7","-Meak6dG9iqvHWfAGQvy") 
GROUP BY SD.session_id 

【讨论】:

【参考方案4】:

试试这个:

SELECT A.session_id,SUM(A.Total) AS Total
FROM 
(
  SELECT session_details.session_id,session_details.spent_points AS Total
  FROM session_details 
  WHERE session_details.session_id IN ("-Meagevy6y9ukbmFXvB7","- 
  Meak6dG9iqvHWfAGQvy") 

  UNION ALL

  SELECT template_sales.session_id, template_sales.price_points AS Total
  FROM template_sales 
  WHERE template_sales.session_id 
  IN ("-Meagevy6y9ukbmFXvB7","-Meak6dG9iqvHWfAGQvy") 
) AS A
GROUP BY A.session_id

【讨论】:

如果两个表中的 sessionId 和 points 相同,您将需要 UNION ALL 以避免删除行。

以上是关于mysql的行求和、列求和是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何对特定列中具有相同值的行求和

将mysql中的列从上到下行求和并选择值所在的行

获取具有 stdClass 对象列的行并求和具有相同 id 的元素

Excel中几行几列怎么求和呢?

对 data.frame 或矩阵中的行求和

如何对来自不同表MySQL的两列求和