2017-11-03 7 views
-1

でグループを含む他の二つの計算された合計の割合を計算するには、私が今持っているしたい結果がこのMySQLは月

enter image description hereのように見えるこの

enter image description here

ようなモデルで3つのテーブルを持っていると言います

私は、月額すべての従業員によって行われたターンオーバーと利益を計算し、最後の年同月と比較して利益の割合の違いを計算します。 INTERVAL機能を備えた最後の12ヶ月間を含める必要があります。

select 
    bookings.b_emp_id as "Employee", 
    MONTH(bookings.b_date) as Month, 
    @turnover1 := sum(bookings.b_turnover) as '2017-turnover', 
    @turnover2 := (select sum(lx.b_turnover) 
       from bookings as lx 
       where lx.b_date = date_add(bookings.b_date, INTERVAL -1 YEAR) 
       GROUP BY 
        MONTH(bookings.b_date), 
        YEAR(bookings.b_date), 
        bookings.b_emp_id 
       ) as '2016-turnover', 
    sum(b_profit) as '2017-profit', 
    @profit1 := (select sum(lx.umsatz_fees) 
       from bookings as lx 
       where lx.b_date = date_add(bookings.b_date,INTERVAL -1 YEAR) 
       GROUP BY 
       MONTH(bookings.b_date), 
       YEAR(bookings.b_date), 
       bookings.b_emp_id 
      ) as '2016-profit' 
from bookings 
where bookings.b_date > '2017-01-01' 
    and bookings.b_emp_id = ´SA´ 
GROUP BY MONTH(bookings.b_date) 
order by bookings.b_date desc 
+0

あなたは – numbtongue

+0

を参照してください。..だけでなく、あなたのクエリを投稿し、あなたはその中にある問題について説明してくださいすることができ:[なぜ私は非常に単純なSQLクエリであることを私には思える何のためにMCVEを提供する必要があります?]( https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query) – Strawberry

+0

私のクエリで投稿を編集しましたが、その結果は1人の従業員にすぎず、差分の計算も追加する必要があります – user3719881

答えて

0

条件付き集計を使用します。過去12/24か月、または2017年と2016年の月を見たいかどうかは不明です。どのようにパーセンテージを計算したいか分かりません。私は今年の利益を昨年の質問で以下の質問に分けます。あなたのニーズを満たすように調整してください。

select 
    b_emp_id, 
    month, 
    turnover_this_year, 
    profit_this_year, 
    turnover_last_year, 
    profit_last_year, 
    profit_this_year/profit_last_year * 100 as diff 
from 
(
    select 
    b_emp_id, 
    month(b_date) as month, 
    sum(case when year(b_date) = year(curdate()) then b_turnover end) as turnover_this_year, 
    sum(case when year(b_date) = year(curdate()) then b_profit end) as profit_this_year, 
    sum(case when year(b_date) < year(curdate()) then b_turnover end) as turnover_last_year, 
    sum(case when year(b_date) < year(curdate()) then b_profit end) as profit_last_year 
    from bookings 
    where year(b_date) in (year(curdate()), year(curdate()) - 1) 
    and month(b_date) <= month(curdate()) 
    group by b_emp_id, month(b_date) 
) figures 
order by b_emp_id, month; 
+0

私は最後の12月24日の月を見たい場合はどのようになりますどのような – user3719881

+0

'どこBDATE> CURDATE() - インターバル24 month'と'合計(ケースBDATE> CURDATE() - その後、間隔12ヶ月... '。しかし、私は(例えば、月12、2016分の2015年)'順月別<=月(CURDATE())、b_emp_id、month'におよび/または年表示順を変更すると思います。 –

+0

従業員がありますそれはそれはとてもヌルエントリが存在しない、それらを整理することが可能であり、今年は仕事を始めた? – user3719881