SQL SELECT 多个数据 table 并计算
SQL SELECT multiple data in table and calculate
我想 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 中是否可行吗?
我的 table 结构如下:
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')
;
我认为你可以使用 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;
试试这个
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;
您可以同时使用两者
//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);
我想 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 中是否可行吗?
我的 table 结构如下:
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')
;
我认为你可以使用 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;
试试这个
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;
您可以同时使用两者
//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);