-2

我正在寻找从两个 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);

现在我需要来自 rate_table by rate_table.rate, sum rate_table.amount- sum trans_table.amountwhere trans_table.trade_id = rate_table.id...的分组结果。

所以上面的例子应该给出结果:

rate   |sum  | sum - sum second table
4.5555 | 200 | 150 |
4.4444 | 50  | 50  |
4

4 回答 4

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 ;
;
于 2013-07-16T12:36:25.330 回答
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,并且您无法正确加入交易表。

于 2013-07-16T12:38:34.307 回答
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
于 2013-07-16T12:09:56.887 回答
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;

小提琴

于 2013-07-16T12:16:07.960 回答