我正在寻找一种从两个MYSQL表中获取结果的解决方案
第一个表是:rate_table
`id` int(11) NOT NULL auto_increment,
`rate` float(5,4) NOT NULL,
`amount` float(12,2) NOT NULL,
INSERT INTO `rate_table` (`id`, `rate`, `amount`) VALUES
(1, 4.1555, 100),
(2, 4.1555, 100),
(3, 4.4444, 50),
第二个表是:trans_table
`id` int(11) NOT NULL auto_increment,
`amount` float(12,2) NOT NULL,
`rate_id` int(11) NOT NULL,
INSERT INTO `trans_table` (`id`, `amount`, `rate_id`) VALUES
(1, 20, 1),
(2, 30, 1);
现在我需要{_ 1}}之前的rate_table小组结果,rate_table.rate
总和{sum rate_table.amount
trans_table.amount
....
所以上面的例子应该给出结果:
trans_table.trade_id = rate_table.id
答案 0 :(得分:1)
您可以尝试以下操作。
请参阅http://sqlfiddle.com/#!2/49f5b/24
select rate, sum(rate_table.amount), IFNULL(sum(rate_table.amount),0) - IFNULL(sum(IFNULL(trans_table.amount,0)),0) from
rate_table inner join trans_table on trans_table.rate_id = rate_table.id group by rate_table.rate
UNION
select rate, sum(rate_table.amount), IFNULL(sum(rate_table.amount),0) from
rate_table where rate not in (select rate from rate_table where rate in (select rate from rate_table, trans_table where trans_table.rate_id = rate_table.id)) group by rate_table.rate ;
;
答案 1 :(得分:0)
SELECT rate, ratesum , ratesum-IFNULL(transsum, 0) sum_minus_sum
FROM (SELECT rate, SUM(amount) ratesum
FROM rate_table
GROUP BY rate) r
LEFT JOIN
(SELECT rate_id, SUM(amount) transsum
FROM trans_table
GROUP BY rate_id) t
ON r.rate = t.rate_id
答案 2 :(得分:0)
select rate_table.rate, SUM(rate_table.amount) as sum1,
COALESCE((SUM(rate_table.amount) - SUM(trans_table.amount)),
SUM(rate_table.amount)) as sum2
from rate_table LEFT join trans_table on
trans_table.rate_id = rate_table.id
group by rate_table.rate;
答案 3 :(得分:0)
我只是简单地修改了Barmar的答案
SELECT rate, ratesum, ratesum - IFNULL(transsum, 0) sum_minus_sum
FROM ( SELECT id, rate, SUM(amount) ratesum
FROM rate_table
GROUP BY rate
) r LEFT JOIN (
SELECT rate_id, SUM(amount) transsum
FROM trans_table
GROUP BY rate_id) t
ON r.id = t.rate_id;
编辑
虽然上面的查询产生了答案中给出的结果,但它仍然不是可行的方法。通过按费率对费率表进行分组,您将丢失其ID,并且您无法正确加入交易表。