2015-01-31 2 views
0

하위 쿼리에서 group by를 사용하여 쿼리를 작성하려고하는데 많은 블로그를 참조했지만 모든 값을 얻을 수는 없습니다.두 열로 그룹화

나는 세 개의 테이블을 가지고 있으며, 아래 테이블의 구조가 있습니다.

Pet_Seller_Master

ps_id ps_name city_id       
2  abc  1        
3  xyz  2        
4  fer  4        
5  bbb  1        

City_Master

city_id city_name  
1  Bangalore  
2  COIMBATORE 
4  MYSORE  

Api_Entry

api_id ps_id otp 
1  2  yes 
2  3 
3  2  yes 
4  3  yes 
5  4   
6  5  yes 
7  5  yes  
8  5  yes 

쿼리 판매자의 수를 얻을 수 있습니다 제로 OTP, 애완 동물 판매없이 1과와 애완 동물 판매없이 otp, 2 otp의 애완 동물 판매자는 없으며, 특정 도시의 otp가 2보다 큰 애완 동물 판매자는 없습니다. 날짜 범위 내.

나는 도시, PSP를 얻을 수 있어요 다음은 질의를 통해

, 제로 OTP

select cm.city_name, 
    count(ps.ps_id) as PSP, 
    ((select count(ps1.ps_id) 
      FROM ps_master ps1 
      WHERE ps1.city = cm.city_id)- 
     (SELECT count(distinct ps1.ps_id) 
      from ps_master ps1 
      INNER JOIN api_entry ae ON ps1.ps_id = ae.ps_id and otp!='' 
      WHERE ps1.city = cm.city_id and date(timestamp) >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY AND date(timestamp) < curdate())) as zero_psp 
    from ps_master ps INNER JOIN city_master cm ON ps.city = cm.city_id and     cm.city_type = 'IN HOUSE PNS' 
    group by city_id 

나에게이 쿼리를 해결하는 솔루션을 알려주세요. 미리 감사드립니다.

+0

제발 좀 도와주세요. 감사 – Akshobhya

답변

0

옳은 길을 가고 있습니다. 당신의 수를 얻고 싶다면

where otp <> 'yes' 

: 당신이 제로 OTP와 판매자의 수를 얻으려면, 지금

select c.city_name, a.otp, p.ps_name, COUNT(*) nbr 
from Api_Entry a 
inner join Pet_Seller_Master p on p.ps_id=a.ps_id 
inner join City_Master c on p.city_id=c.city_id 
group by c.city_name, a.otp, p.ps_name 

을 그냥 where 절을 적용 : 여기 내가 사용하는 것이 무엇인가 otp> 2 인 애완 동물 판매자는 다음 하위 쿼리를 사용합니다.

select * 
from (
    select c.city_name, a.otp, p.ps_name, COUNT(*) nbr 
    from #tempA a 
    inner join #tempP p on p.ps_id=a.ps_id 
    inner join #tempC c on p.city_id=c.city_id 
    group by c.city_name, a.otp, p.ps_name 
) g 
where nbr > 2