【问题标题】:Relational algebra, finding how many a number is called关系代数,找出有多少个数被调用
【发布时间】:2014-03-27 10:54:57
【问题描述】:

我有一张如下表

callingNumber | calledNumber 
-----------------------------
n1            | n2
n2            | n6
n9            | n3
n1            | n2
n2            | n1

我想知道如何得到这样的结果

callingNumber | calledTimes
----------------------------
n1            | 1
n2            | 2
n9            | 0

所以结果将只显示主叫号码(谁发起呼叫)以及他们被叫了多少次(它们出现在“被叫号码”字段中),

【问题讨论】:

    标签: sql relational-algebra


    【解决方案1】:
    Select calledNumber,COALESCE(calledTimes,0)
    FROM (
          SELECT calledNumber,Count(*) as calledTimes
          FROM TableName
          GROUP BY calledNumber
         )Z
    RIGHT JOIN TableName t
       ON t.callingNumber=z.calledNumber
    

    【讨论】:

    • 谢谢,但这不会显示结果中的最后一行:n9 | 0
    【解决方案2】:

    您需要从所有想要的数字列表开始,然后加入要汇总的数字:

    select cn.callingNumber, count(t.calledNumber) as cnt
    from (select distinct callingNumber from table t) cn left outer join
         table t
         on cn.callingNumber = t.calledNumber
    group by cn.callingNumber;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多