选择两个没有连接的表mysql

时间:2016-01-09 12:32:51

标签: mysql sql select

有两张表,充值和购买。

select * from recharge;
+-----+------+--------+---------------------+
| idx | user | amount | created             |
+-----+------+--------+---------------------+
|   1 |    3 |     10 | 2016-01-09 20:16:18 |
|   2 |    3 |      5 | 2016-01-09 20:16:45 |
+-----+------+--------+---------------------+
select * from purchase;
+-----+------+----------+---------------------+
| idx | user | resource | created             |
+-----+------+----------+---------------------+
|   1 |    3 |        2 | 2016-01-09 20:55:30 |
|   2 |    3 |        1 | 2016-01-09 20:55:30 |
+-----+------+----------+---------------------+

我想弄清楚用户的余额是SUM(金额) - COUNT(purchase.idx)。 (在这种情况下,13)

所以我试过了

SELECT (SUM(`amount`)-COUNT(purchase.idx)) AS balance
FROM `recharge`, `purchase`
WHERE purchase.user = 3 AND recharge.user = 3

但是,它返回了错误。

2 个答案:

答案 0 :(得分:2)

如果您想要准确的计数,那么在进行算术之前聚合。对于您的特定情况:

select ((select sum(r.amount) from recharge where r.user = 3) - 
        (select count(*) from purchase p where p.user = 3)
       )

要为多个用户执行此操作,请将子查询移至from子句或使用union all和聚合。如果用户可能只在一个表中,则第二个更安全:

select user, coalesce(sum(suma), 0) - coalesce(sum(countp), 0)
from ((select user, sum(amount) as suma, null as countp
       from recharge
        group by user
      ) union all
      (select user, null, count(*)
       from purchase
       group by user
      )
     ) rp
group by user

答案 1 :(得分:1)

可以像这样使用联合

SELECT SUM(`amount`-aidx) AS balance
FROM( 
SELECT SUM(`amount`) as amount, 0 as aidx 
from `recharge` where recharge.user = 3
union
select 0 as amount, COUNT(purchase.idx) as aidx 
from `purchase`
WHERE purchase.user = 3 )a