반응형
역대 상위 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
반응형
'source' 카테고리의 다른 글
strerror_r은 어떤 사이즈를 허용해야 합니까? (0) | 2023.11.02 |
---|---|
정의되지 않은 동작은 얼마나 정의되지 않습니까? (0) | 2023.10.28 |
제약 조건 레이아웃을 다른 제약 조건 레이아웃에 포함하고 각 제약 조건 간에 제약 조건을 설정하는 방법 (0) | 2023.10.28 |
bootstrap.properties가 spring-cloud-starter-config에서 무시되는 이유는 무엇입니까? (0) | 2023.10.28 |
Python's Pandas의 데이터 프레임에서 Matplotlib 산점도 만들기 (0) | 2023.10.28 |