2

私はmySqlが初めてです。曜日ごとにテーブルからクリック数を計算する必要があります。

ここでの期間はデータベースによって異なります。しかし、先週のレコードがない場合は、リストに含まれていません。しかし、私はそれを0にする必要があります。そのためにはどうすればよいですか?

SELECT CASE 
    WHEN PERIOD >= NOW() - INTERVAL 4 WEEK
                AND PERIOD < NOW() - INTERVAL 3 WEEK THEN '22-28 days ago'

    WHEN PERIOD >= NOW() - INTERVAL 3 WEEK
                AND PERIOD < NOW() - INTERVAL 2 WEEK THEN '15-21 days ago'

    WHEN PERIOD >= NOW() - INTERVAL 2 WEEK
        AND PERIOD < NOW() - INTERVAL 1 WEEK THEN '8-14 days ago'

    WHEN PERIOD >= NOW() - INTERVAL 1 WEEK
                THEN 'up to 7 days ago'
           END WeekPeriod, IFNULL(count(CLICKS),0) TotalClicks

FROM TABLE

WHERE PERIOD >= NOW() - INTERVAL 4 WEEK

GROUP BY CASE 
    WHEN PERIOD >= NOW() - INTERVAL 4 WEEK
                    AND PERIOD < NOW() - INTERVAL 3 WEEK THEN '22-28 days ago'

    WHEN PERIOD >= NOW() - INTERVAL 3 WEEK
                AND PERIOD < NOW() - INTERVAL 2 WEEK THEN '15-21 days ago'

    WHEN PERIOD >= NOW() - INTERVAL 2 WEEK
                AND PERIOD < NOW() - INTERVAL 1 WEEK THEN '08-14 days ago'

    WHEN PERIOD >= NOW() - INTERVAL 1 WEEK
                THEN '01 to 7 days ago'

END
 ORDER BY WeekPeriod";

答えは次のようになります

1-7 0 
8-15 14 
16-21 34 
21-28 45
4

1 に答える 1

1
SELECT uq.timespan, COALESCE(tsq.TotalClicks, 0) as Clicks FROM (
SELECT '22-28 days ago' as timespan
union SELECT '15-21 days ago'
union SELECT '8-14 days ago'
union SELECT 'up to 7 days ago'
)uq LEFT JOIN (
SELECT CASE 
    WHEN PERIOD >= NOW() - INTERVAL 4 WEEK
                AND PERIOD < NOW() - INTERVAL 3 WEEK THEN '22-28 days ago'
    WHEN PERIOD >= NOW() - INTERVAL 3 WEEK
                AND PERIOD < NOW() - INTERVAL 2 WEEK THEN '15-21 days ago'
    WHEN PERIOD >= NOW() - INTERVAL 2 WEEK
        AND PERIOD < NOW() - INTERVAL 1 WEEK THEN '8-14 days ago'
    WHEN PERIOD >= NOW() - INTERVAL 1 WEEK THEN 'up to 7 days ago'
           END WeekPeriod, 
           count(CLICKS) TotalClicks
FROM TABLE
WHERE PERIOD >= NOW() - INTERVAL 4 WEEK
GROUP BY WeekPeriod
/*ORDER BY WeekPeriod -- unnecessary, GROUP BY implicits ORDER BY*/
)tsq ON uq.timespan = tsq.WeekPeriod
于 2012-11-05T18:10:25.823 に答える