【问题标题】:how to sum two columns from different tables MySQL如何对来自不同表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 

【问题讨论】:

  • 联合,然后求和

标签: mysql sql group-by sum union-all


【解决方案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 以避免删除行。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        • 2019-06-02
        • 1970-01-01
        相关资源
        最近更新 更多