我有两张桌子:
我试图在这两个表之间创建一个连接,结果是:
'mentor_id'|'# of people'|'# of distinct interactions' 这样,我就可以知道导师在给定的时间里给出的建议是谁,而不是他们应该做多少%。
我所做的..。
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
|mentee_id|mentor_id
|1 |3
|2 |3
|3 |5国米
|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表,在不同的情况下,只能有<= #
谢谢
最后,我做了这个查询,同时也得到了从未进行过任何交互的导师。我不得不在这两方面使用不同的。
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发布于 2015-02-02 17:25:07
我知道您的问题是,您正在重复交互,因为您基本上只是试图将这两个表连接到您的查询中。您想要做的是一个相关的子查询,以获得每个导师有多少次交互的答案。
就像这样。
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发布于 2015-02-02 19:40:43
为了得到这个结果..。
'mentor_id'|'# of people'|'# of distinct interactions' 我想这就是你需要的..。
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这是链接到。
https://dba.stackexchange.com/questions/90818
复制相似问题