2017-10-19 9 views
0

私は以下のシナリオを持っています。私は3つのテーブル(ユーザー、売上、sales_details)を持っています。Sales to Salesとsales_detailsの関係は1対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か月間のユーザーの売上がわかりますが、元のクエリでは1か月になります。結果はユーザーごとに同じであることがわかりますが、他の計算には結果が必要です。 私の問題は、サブクエリが元のユーザーIDを読み取るように2つのクエリを結合する方法です。

ありがとうございます!

+0

「SUM(合計)」を行う必要があるのはなぜですか? 「合計」は1つだけなので、合計は値と同じです。 – Barmar

+0

2番目のクエリを 'GROUP BY User'に変更し、2つのクエリ' ON s.id = sub.User'を結合します。 – Barmar

+0

あなたは合っている(合計)無駄です。あなたは、参加の完全な例を挙げることができますか? – user518543

答えて

1

ユーザーによって2番目のクエリをグループ化し、元のクエリと結合します。

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という魅力のように機能します!どうもありがとうございます。 私はあなたに何かもっと質問する必要があります、サブクエリの過去1年間に何ヶ月が実際の売上(sum(qty)> 0)を持つかを数えるフィールドを追加したいと思います。 もう1つは、NOW()の代わりに実際の売上の月と年に基づいてサブクエリを実行できるかどうかです。 – user518543

+0

'SUM(qty> 0)'を使用して、売上の月の合計を取得します。あなたが売り上げなしで何ヶ月もレコードを持っていないのであれば、単に 'COUNT(*)'を使ってください。 – Barmar

+0

私は2番目の質問を理解しているか分かりません。サブクエリを月と年でグループ化し、結合条件でサブクエリを使用できます。 – Barmar

関連する問題