2012-02-23 4 views
0

첫 번째 선택은mysql이 두 개의 선택을 결합합니까?

select user_id, count(*) as count 
from users 
where referrer IS NOT NULL 
group by referrer 
order by count DESC 

그럼 내가 위의 쿼리에서 사용자를 참조하는 사용자의 날짜를 얻을 필요가있는 쿼리에서 반환 된 레코드를 기반으로합니다.

select user_id from users where token = IDS_FROM_LAST_QUERY 

은 내가 서브 쿼리를 사용하여 IN (하위 쿼리)하지만 서브 쿼리에서 카운트를 유지하려고까지 넘어지고있어 어디 말할 수 있습니다 알고 있습니다.

그래서 결국 나는 내가 CTE (공통 테이블 식)를 사용하는 것이 다음과 같은 정보를

user_id, count 

답변

1
select o.user_id user_id, count(*) count 
from users o 
join users i on o.token = i.user_id 
where i.referrer is not null 
group by referrer 
order by count desc 
+0

o.token = i.referrer로 조인을 수정했습니다. – hcker2000

0

이 필요합니다. CTE는 하나의 모집단을 얻고 CTE와 동일하거나 약간 다른 모집단을 조회하기 위해 매우 편리합니다.

WITH Referrer (user_id, count) AS 
(
select user_id, count(*) as count 
from users 
where referrer IS NOT NULL 
group by referrer 
order by count DESC 
) 

select 

users.user_id 
,Referrer.count 

from users 

inner join Referrer.user_id = users.user_id 
관련 문제