source

역대 상위 5개국에 대한 지난 7일간의 총 합계 집계

manycodes 2023. 10. 28. 08:04
반응형

역대 상위 5개국에 대한 지난 7일간의 총 합계 집계

라는 테이블이 있습니다.events다음과 같이 보입니다.

 id |    date    | country |  event | count
--------------------------------------------- 
 1  | 2018-03-16 |   RS    | views  | 33577
 2  | 2018-03-21 |   US    | plays  | 232712
 3  | 2018-03-14 |   AR    | clicks | 469159
 4  | 2018-03-18 |   US    | plays  | 415732
 5  | 2018-03-26 |   US    | views  | 442159
 6  | 2018-03-22 |   BA    | plays  | 181610
 7  | 2018-03-21 |   UK    | plays  | 57899
 8  | 2018-03-17 |   CZ    | views  | 64605
 9  | 2018-03-17 |   BA    | plays  | 375444
 10 | 2018-03-22 |   US    | plays  | 148073
 11 | 2018-03-23 |   BA    | views  | 181644
 12 | 2018-03-22 |   CZ    | clicks | 411953
 13 | 2018-03-15 |   AR    | views  | 329597
 14 | 2018-03-18 |   BA    | clicks | 480834
 15 | 2018-03-17 |   CZ    | plays  | 279060
 16 | 2018-03-19 |   MN    | views  | 611975
 17 | 2018-03-26 |   MN    | clicks | 227115
 18 | 2018-03-24 |   BA    | plays  | 176248
 19 | 2018-03-14 |   UK    | views  | 288072
 20 | 2018-03-18 |   UK    | plays  | 598980

나는 역대 상위 5개국의 마지막 7일간의 종목별 합계를 얻어야 합니다.현재 다음을 수행하는 쿼리가 있습니다.

SELECT
    `c`.`country`,
    `event`,
    SUM(`count`) AS `total`
FROM
    `eem_events` `a`
INNER JOIN(
    SELECT
        `country`
    FROM
        `eem_events` `b`
    GROUP BY
        `country`
    ORDER BY
        SUM(`count`)
    DESC
LIMIT 5
) AS `c`
WHERE
    `date` > DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY
    `c`.`country`,
    `event`

이 쿼리는 다음을 반환합니다.

 country | event  | count 
-----------------------------
   AR    | views  | 43084323
   AR    | plays  | 46487773
   AR    | clicks | 44581794
   BA    | views  | 43084323
   BA    | plays  | 46487773
   BA    | clicks | 44581794
   DE    | views  | 43084323
   DE    | plays  | 46487773
   DE    | clicks | 44581794
   MN    | views  | 43084323
   MN    | plays  | 46487773
   MN    | clicks | 44581794
   UK    | views  | 43084323
   UK    | plays  | 46487773
   UK    | clicks | 44581794 

제가 원하는 것은 다음과 같습니다.

 country |   views   |   plays   |  clicks   
-----------------------------------------------
   AR    | 43084323  | 46487773  | 44581794
   BA    | 43084323  | 46487773  | 44581794
   DE    | 43084323  | 46487773  | 44581794
   MN    | 43084323  | 46487773  | 44581794
   UK    | 43084323  | 46487773  | 44581794 

저는 지금 12시간 동안 이것을 하려고 노력하고 있고 더 이상 생각이 없습니다.보기, 재생 및 클릭의 경우 동일한 값이 있음을 알 수 있습니다.이 결과를 얻기 위해 제 SQL 쿼리 리팩토링을 도와주실 수 있나요?

MySQL / MariaDB를 사용하고 있습니다.

조건 추가만 필요합니다.SUM()

SELECT
    `c`.`country`,
    SUM(CASE WHEN event = 'views'  THEN `count` ELSE 0 END) AS `views`,
    SUM(CASE WHEN event = 'plays'  THEN `count` ELSE 0 END) AS `plays`,
    SUM(CASE WHEN event = 'clicks' THEN `count` ELSE 0 END) AS `clicks`
FROM
    `eem_events` `a`
INNER JOIN(
    SELECT    `country`
    FROM      `eem_events` `b`
    GROUP BY  `country`
    ORDER BY   SUM(`count`) DESC
    LIMIT 5
) AS `c`
  ON `a`.`country` = `c`.`country`
WHERE
    `date` > DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY
    `c`.`country`

언급URL : https://stackoverflow.com/questions/49520028/get-total-count-of-last-seven-days-for-top-5-countries-of-all-time

반응형