【问题标题】: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;