首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从两个表中计算百分比

从两个表中计算百分比
EN

Database Administration用户
提问于 2015-02-02 15:57:51
回答 2查看 6.7K关注 0票数 1

我有两张桌子:

  • 首先,在一个导师下面包含独特的被辅导者,因此导师可以在该表中有多个被辅导者。
  • 第二个包含不同日期的导师与被辅导者之间的交互,因此mentos和mentos可能会出现多次。

我试图在这两个表之间创建一个连接,结果是:

代码语言:javascript
复制
'mentor_id'|'# of people'|'# of distinct interactions'  

这样,我就可以知道导师在给定的时间里给出的建议是谁,而不是他们应该做多少%。

我所做的..。

代码语言:javascript
复制
SELECT INTER.mentor_id, COUNT(DISTINCT INTER.mentee_id), COUNT(f.mentee_id)
FROM INTER WITH (NOLOCK)
INNER JOIN  
    (SELECT mt.mentee_id, mt.mentor_id
     FROM mentee_table mt WITH (NOLOCK)
    ) as f 
ON f.mentor_id = INTER.mentor_id
WHERE (//period)
GROUP BY INTER.mentor_id

这方面的问题是,在没有任何分组或聚合的情况下查看结果时,我会收到来自子查询的重复项,因为国米中有更多的记录。

图式

mentee_table

代码语言:javascript
复制
|mentee_id|mentor_id
|1        |3
|2        |3
|3        |5

国米

代码语言:javascript
复制
|mentee_id|mentor_id
|1        |3
|1        |3
|1        |3
|2        |3
|3        |5
|3        |5

最后,我将使用计数来计算百分比,例如

COUNT(DISTINCT INTER.mentee_id)*100/COUNT(f.mentee_id) --这意味着INTER表,在不同的情况下,只能有<= #

谢谢

编辑

最后,我做了这个查询,同时也得到了从未进行过任何交互的导师。我不得不在这两方面使用不同的。

代码语言:javascript
复制
SELECT mt.mentor_id, COUNT(DISTINCT mt.mentee_id), COUNT(DISTINCT INTER.mentee_id)
FROM mentee_table mt WITH (NOLOCK)
   LEFT JOIN INTER WITH (NOLOCK) 
   ON INTER.mentor_id = mt.mentor_id AND INTER.mentee_id = mt.mentee_id
GROUP BY mt.mentor_id
ORDER_BY mt.mentor_id
EN

回答 2

Database Administration用户

发布于 2015-02-02 17:25:07

我知道您的问题是,您正在重复交互,因为您基本上只是试图将这两个表连接到您的查询中。您想要做的是一个相关的子查询,以获得每个导师有多少次交互的答案。

就像这样。

代码语言:javascript
复制
select a.mentor_id, count(distinct(a.mentee_id)) as UniqueMenteeCt,b.InterCt
from mentee_table a inner join
(select a.mentor_id, count(a.mentee_id) as InterCt
 from INTER a 
 group by a.mentor_id
)b on a.mentor_id = b.mentor_id
group by a.mentor_id,InterCt
票数 1
EN

Database Administration用户

发布于 2015-02-02 19:40:43

为了得到这个结果..。

代码语言:javascript
复制
'mentor_id'|'# of people'|'# of distinct interactions'  

我想这就是你需要的..。

代码语言:javascript
复制
WITH X as (
  SELECT mentor_id, count(*) AS [Num_of_mentees] FROM mentee_table GROUP BY mentor_id
  ),
Y as (
  SELECT mentor_id, count(*) AS [Num_of_interactions] FROM inter GROUP BY mentor_id
  )
SELECT DISTINCT(m.mentor_id) -- Ideally you should use a Mentors table instead of this.
  , X.Num_of_mentees
  , Y.Num_of_interactions
FROM mentee_table m
JOIN X on X.mentor_id = m.mentor_id
JOIN Y on Y.mentor_id = m.mentor_id

这是链接到

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/90818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档