【问题标题】:SQL SELECT multiple data in table and calculateSQL SELECT 表中的多个数据并计算
【发布时间】:2017-06-28 23:12:14
【问题描述】:

我想用多个 SELECT 语句进行 SELECT 和计算。

我要运行的 SQL 语句是:

SELECT COALESCE(SUM(left), 0) - COALESCE(SUM(right), 0) as total1
FROM trans
WHERE user_id = 2 AND k_id = 120;

SELECT COALESCE(SUM(left), 0) - COALESCE(SUM(right), 0) as total2
FROM trans
WHERE user_id = 2 AND k_id = 121;

SELECT COALESCE(SUM(left), 0) - COALESCE(SUM(right), 0) as total3
FROM trans
WHERE user_id = 2 AND k_id = 480;

选择结果后,我想对总数求和(total1 + total2 + total3)。有人知道这在 mysql 中是否可行?

我的表结构如下:

CREATE TABLE trans
    (`id` int, 
    `user_id` int(11), 
    `f_id` varchar(55), 
    `k_id` int(11), 
    `left` varchar(55), 
    `right` varchar(55))
;

INSERT INTO trans
    (`id`, `user_id`, `f_id` , `k_id`, `left`, `right`)
VALUES
    (1, '2', 'F/12C', '120', '0', '1250.00'),
    (2, '2', 'F/1B3', '121', '0', '225.50'),
    (3, '2', 'F/1B3', '654', '0', '26.50'),
    (4, '2', 'F/1B3', '612', '0', '12.50'),
    (5, '2', 'F/A23', '480', '1512.50', '112.00'),
    (6, '2', 'F/A23', '412', '112.50', '742.00'),
    (7, '2', 'F/1D3', '220', '0', '50.00')
;

【问题讨论】:

    标签: mysql coalesce


    【解决方案1】:

    我认为你可以使用GROUP BY WITH ROLLUP

    SELECT k_id, COALESCE(SUM(left), 0) - COALESCE(SUM(right), 0) as total1
    FROM trans
    WHERE user_id = 2 AND k_id IN (120, 121, 480)
    GROUP BY k_id WITH ROLLUP;
    

    【讨论】:

    • 我正在测试该语句。到目前为止它的工作,但我得到了 2 行的结果。你知道这是为什么吗?
    • @John 。 . .您应该得到数据中每个k_id 的总行和一行。
    【解决方案2】:

    试试这个

    SELECT  ( (SELECT COALESCE(SUM(left), 0) - COALESCE(SUM(right), 0) 
    FROM trans WHERE user_id = 2 AND k_id = 120) + (SELECT COALESCE(SUM(left), 0) - COALESCE(SUM(right), 0) 
    FROM trans WHERE user_id = 2 AND k_id = 121) + (SELECT COALESCE(SUM(left), 0) - COALESCE(SUM(right), 0) 
    FROM trans WHERE user_id = 2 AND k_id = 480) ) as sum FROM trans LIMIT 0,1;
    

    【讨论】:

      【解决方案3】:

      你可以同时使用

      //First One
          select (SELECT COALESCE(SUM(trans.left), 0) - COALESCE(SUM(trans.right), 0) as total1
          FROM trans
          WHERE user_id = 2 AND k_id = 120)
          +
          (SELECT COALESCE(SUM(trans.left), 0) - COALESCE(SUM(trans.right), 0) as total2
          FROM trans
          WHERE user_id = 2 AND k_id = 121)
          +
          (SELECT COALESCE(SUM(trans.left), 0) - COALESCE(SUM(trans.right), 0) as total3
          FROM trans
          WHERE user_id = 2 AND k_id = 480) as sum;
      
      //Second One    
          SELECT COALESCE(SUM(trans.left), 0) - COALESCE(SUM(trans.right), 0) as sum
              FROM trans
              WHERE user_id = 2 AND k_id in (120 ,121,480);
      

      【讨论】:

        猜你喜欢
        • 2020-04-07
        • 1970-01-01
        • 1970-01-01
        • 2021-07-17
        • 1970-01-01
        • 1970-01-01
        • 2014-06-09
        • 2022-01-27
        • 2021-03-27
        相关资源
        最近更新 更多