【问题标题】:how to count the two count function's return value in once sql query如何在一次sql查询中计算两个count函数的返回值
【发布时间】:2014-04-28 18:57:42
【问题描述】:

我有三个表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

如何优化?谢谢! :)

PS:

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

【问题讨论】:

    标签: mysql sql sql-server


    【解决方案1】:

    您可以在一个查询中完成这些操作。例如,这样的事情:

    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 用于提及正确的连接语法。当我必须查看语句的 WHERE 部分以确定连接条件时,我讨厌它!
    • 从 C,B 中选择 count(A.id),其中 A.id = B.id;你能告诉A.id是什么是你有两个表A,B
    • @Ramya 。 . .我认为这是 OP 的一个问题,应该是这个问题。我认为代码只是一个错字。
    • 是的。在这里发错了。
    • @GordonLinoff 谢谢你的提示。我真的需要重点学习连接和子查询语法。它们都让我头疼!
    【解决方案2】:

    这样试试

    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
    

    【讨论】:

    • 谢谢!这很有用! :)
    【解决方案3】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多