次のmysqlクエリを理解するのに苦労しています。
これは、ユーザーが実行したタスクに応じて特定のレートを持つ、一種の時間追跡を目的としています。また、週末にユーザーに何を支払うべきかを把握するために、要約を作成する必要があります。
-----------tSessions---------------------------
|id |userid |typeid |session_length_min
-----------------------------------------------
|1 |1 |1 |30
-----------------------------------------------
|2 |1 |1 |45
-----------------------------------------------
|3 |1 |2 |(null)
-----------------------------------------------
|4 |2 |2 |(null)
-----------------------------------------------
-----------tUsers-----------------------------------------------------------------------------------
|id |name |rate_cleaning_30_min |rate_cleaning_45_min |rate_kitchenwork |rate_dogwalking
----------------------------------------------------------------------------------------------------
|1 |Tom |30 |50 |40 |20
----------------------------------------------------------------------------------------------------
|2 |Joe |35 |60 |45 |20
----------------------------------------------------------------------------------------------------
|3 |Dave |40 |60 |30 |10
----------------------------------------------------------------------------------------------------
-----------tTypes----------------
|id |name
---------------------------------
|1 |Cleaning
---------------------------------
|2 |Kitchenwork
---------------------------------
|3 |Dogwalking
---------------------------------
============== Required Result ====================
|username |sessioncount |amount_to_pay
---------------------------------------------------
|Tom |2 |120
---------------------------------------------------
|Joe |1 |45
---------------------------------------------------
以下のクエリは、あまり成功していないアプローチの場合の 1 つです。
SELECT
tSessions.id,
tSessions.userid,
tSessions.typeid,
tSessions.session_length_min,
SUM(tUsers.rate_cleaning_30_min) AS rate_cleaning_30_min_sum,
SUM(tUsers.rate_cleaning_45_min) AS rate_cleaning_45_min_sum,
SUM(tUsers.rate_kitchenwork) AS rate_kitchenwork,
SUM(tUsers.rate_dogwalking) AS rate_dogwalking,
Count(*) AS sessioncount,
FROM
tSessions
INNER JOIN tUsers ON tSessions.userid = tUsers.id
WHERE WEEKOFYEAR(FROM_UNIXTIME(datetime))=WEEKOFYEAR(NOW())-1
GROUP BY
tSessions.userid,
tSessions.typeid