【问题标题】:how to get count of a column along with column from another table如何从另一个表中获取列的计数以及列
【发布时间】:2019-07-31 05:14:09
【问题描述】:

有没有其他方法可以解决这个问题。我想通过不能使用 ii 来使用 group。 我的解决方案:

SQL> select (select count(dr_id) 
     from cus_detail c 
     where c.dr_id=d.dr_id) as count_cus,dr_name from driver_detail d;

 COUNT_CUS DR_NAME
---------- ---------------
     1 raju
     0 mandi
     2 sajuman
     3 babu ram coi
     0 daju
     0 bare babu

【问题讨论】:

  • 你得到的错误到底是什么。

标签: sql oracle group-by count


【解决方案1】:

使用这个。

select count(c.dr_id) as count_cus, d.dr_name 
    from driver_detail d
    inner join cus_detail c on c.dr_id=d.dr_id
    group by d.dr_name

【讨论】:

    【解决方案2】:

    我不完全确定我理解你在问什么,但我认为你在问如何对事物进行分组并从另一个表中引入数据

    我通常更喜欢将此作为分组子查询:

    select 
      d.dr_name,
      c.ctr
    from 
     (select dr_id, count(dr_id) ctr from cus_detail group by dr_id) c
    INNER JOIN driver_detail d ON c.dr_id=d.dr_id
    

    这里的原因是,通过在计数时对id 进行分组意味着我们可以为两个不同的人(即不同的id)保持计数,这两个人都叫 John。相反,如果我们加入 id,然后在 Name 上分组,那么两个都叫 John 的不同人将把他们的计数加在一起

    在子查询中分组和计数也很好,因为如果三个或更多表以 1:Many 方式相关,有时在外部查询中分组和计数会引入错误计数。如果 a 中的记录在 b 中有 3 条记录,在 c 中有 4 条记录,并且我们在计算之前加入所有记录,我们将计算 12 条记录。如果我们先分组,我们将加入 1:1 的关系,并且计数器不会错误地膨胀

    【讨论】:

      【解决方案3】:

      如果两个 DR_NAME 相同,那么 GROUP BY 可以给出不同的结果,那么您当前的查询将给出什么。

      所以最好使用如下分析函数:

      SELECT
          COUNT(C.DR_ID) OVER(
              PARTITION BY C.DR_ID
          ) AS COUNT_CUS,
          DR_NAME
      FROM
          DRIVER_DETAIL D
          JOIN CUS_DETAIL C ON ( C.DR_ID = D.DR_ID )
      

      干杯!!

      【讨论】:

        【解决方案4】:

        我认为您需要一个基本的聚合查询。您的方法是正确的(尽管可以更好地格式化)。比较标准的方法是join/group by

        select d.dr_name, count(c.dr_id) 
        from driver_detail d left join
             cus_detail c 
             on c.dr_id = d.dr_id 
        group by d.dr_name;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-19
          • 1970-01-01
          • 2021-10-09
          • 1970-01-01
          • 2011-09-13
          • 1970-01-01
          • 2021-10-26
          • 1970-01-01
          相关资源
          最近更新 更多