如何在一次sql查询中统计两个count函数的返回值

时间:2014-03-21 12:02:45

标签: mysql sql sql-server

我有三个表A,B,C。他们的关系是A.id是B的外键而B.id是C的外键。我需要在B.id时加总值= C.id和A.id = B.id,我可以通过查询两次来计算数字。但是现在我需要一些方法来计算一次总和!

我的低效解决方案

select count(C.id) from C,B where C.id = B.id;  //return the value X
select count(A.id) from C,B where A.id = B.id;  //return the value Y
select X + Y; // count the summation fo X and Y

我该如何优化? THKS! :)

PS:

我的问题来自GalaXQL,这是一个SQL互动教程。我有抽象的问题,你可以查看更多细节17.SELECT ... GROUP BY ......有......

3 个答案:

答案 0 :(得分:2)

您可以在一个查询中执行这些操作。例如,像这样:

select (select count(*) from C join B on C.id = B.id) +
       (select count(*) from C join A on C.id = A.id)

(您的第二个查询不会解析,因为A不是可识别的表别名。)

无论如何,如果你正在学习SQL,你应该学习的第一件事是现代join语法。您使用的隐式连接已于15年前过时,并且已成为ANSI标准的一部分超过20年。学习正确的join语法。

答案 1 :(得分:0)

尝试这样

select sum(cid) (

select count(*) as cid from C join B on C.id = B.id
union all 
select count(*) as cid from A join B on A.id = B.id ) as tt

答案 2 :(得分:0)

试试这个:

select 
(select count(*) from C join B on C.id = B.id) 
union
(select count(*) from C join A on C.id = A.id)