2017-10-19 9 views
0

다음 시나리오가 있습니다. 세 테이블 (users, sales, sales_details) Sales to User는 1 대 1의 관계이고 sales_details에 대한 판매는 1 대 다수입니다. 나는 문제없이 모든 3 개의 테이블을 결합하여 각 사용자에 대한 모든 매출을 얻는 쿼리를 실행하고 있습니다. 쿼리는 내가 지금하고 싶은 것은 부질 될 것입니다 내 쿼리에 추가 필드를 추가 할 것입니다이선택 항목의 MySQL 하위 쿼리

SELECT s.month as month,u.name as name, s.year as year, s.date as date,sum(sd.qty) as qty,sum(sd.qty*sd.value) as value,s.id as id,sum(sd.stock) as stock,s.currency as currency,s.user as user 
FROM sales as s  
left join sales_details as sd on s.id = sd.Sales 
inner join users as u on s.user = u.Id 
group by s.Id 

같이 보입니다. 원래 쿼리가 한달을 수행하면서

SELECT SUM(total) AS total_yearly 
FROM (
    SELECT sum(qty) as total 
    FROM sales 
    left join sales_details on sales.Id = sales_details.Sales 
    WHERE ((month <= MONTH(NOW()) and year = YEAR(NOW())) 
     or (month >= MONTH(Date_add(Now(),interval - 12 month)) and year = YEAR(Date_add(Now(),interval - 12 month)))) 
     and User = **ID OF USER**) as sub 

자체에이 쿼리는 지난 12 개월 동안 나에게 사용자의 판매를 제공합니다. 그 결과는 각 사용자마다 동일하지만 다른 계산을 위해 필요하다는 것을 알고 있습니다. 내 문제는 하위 쿼리가 원래 ID에서 사용자 ID를 읽을 수 있도록 2 쿼리를 결합하는 방법입니다.

미리 감사드립니다.

+0

왜 'SUM (total)'을 할 필요가 있습니까? 단 하나의 '합계'가 있으므로 합계는 값과 같습니다. – Barmar

+0

두 번째 쿼리를'GROUP BY User'로 변경 한 다음 두 쿼리'ON s.id = sub.User'를 조인하십시오. – Barmar

+0

맞습니다. 합계가 쓸모가 없습니다. 조인에 대한 완전한 예제를 줄 수 있습니까? – user518543

답변

1

사용자가 두 번째 쿼리를 그룹화 한 다음 원래 쿼리와 연결합니다.

SELECT s.month as month,u.name as name, s.year as year, s.date as date, 
     sum(sd.qty) as qty,sum(sd.qty*sd.value) as value,s.id as id, 
     sum(sd.stock) as stock,s.currency as currency,s.user as user, 
     us.total 
FROM sales as s  
left join sales_details as sd on s.id = sd.Sales 
inner join users as u on s.user = u.Id 
inner join (
    SELECT User, sum(qty) as total 
    FROM sales 
    left join sales_details on sales.Id = sales_details.Sales 
    WHERE ((month <= MONTH(NOW()) and year = YEAR(NOW())) 
     or (month >= MONTH(Date_add(Now(),interval - 12 month)) and year = YEAR(Date_add(Now(),interval - 12 month))))) 
    GROUP BY User) AS us ON s.user = us.user 
group by s.Id 
+0

이것은 @Barmar 같은 매력처럼 작동합니다! 정말 고맙습니다. 좀 더 물어볼 필요가 있습니다. 서브 쿼리의 지난 해 동안 몇 달에 실제 판매액 (sum (qty)> 0)이 있는지 계산할 필드를 추가하고 싶습니다. NOW() 대신 실제 판매 월 및 연도를 기준으로 하위 쿼리를 실행할 수있는 경우입니다. – user518543

+0

'SUM (qty> 0)'를 사용하여 매월 판매 합계를 구하십시오. 판매하지 않고 몇 개월 만에 기록이 없더라도'COUNT (*)'를 사용하십시오. – Barmar

+0

두 번째 질문을 잘 이해하지 못합니다. 하위 쿼리를 월 단위로 그룹화 한 다음 가입 조건에서 사용합니다. – Barmar