반응형
SQL에서 특정 열과 날짜별로 고유한 행을 선택하는 방법은 무엇입니까?
다음과 같은 데이터베이스 테이블이 있습니다.
id | project_id | stat_date | source | medium | campaign | impressions
----------------------------------------------------------------------
5 | 2312 | 2019-08-30| google | cpc | camp_a | 20
4 | 2312 | 2019-08-30| google | cpc | camp_a | 20
3 | 2312 | 2019-08-30| google | organic| camp_b | 12
2 | 2312 | 2019-08-29| google | cpc | camp_a | 35
1 | 2312 | 2019-08-29| google | cpc | camp_c | 44
...| ... | ...| ... | ... | ... | ...
29일에서 30일 사이(날짜 간격은 다를 수 있음)에 ID, stat_date 열이 없는 경우:
project_id | source | medium | campaign | impressions
------------------------------------------------------
2312 | google | cpc | camp_a | 55
2312 | google | organic| camp_b | 12
2312 | google | cpc | camp_c | 44
보시다시피, 저는 20개의 인상이 있는 중복된 행을 없애고 마지막에 있는 '인상' 열의 합계를 얻고 싶습니다.
그러면 어떤 쿼리를 사용하여 그런 결과를 얻을 수 있을까요?
필터가 있는 단순 집계 쿼리를 찾고 있는 것 같습니다.WHERE
절:
SELECT
project_id,
source,
medium,
campaign,
SUM(DISTINCT impressions) impressions
FROM mytable
WHERE stat_date >= '2019-08-29' AND stat_date <= '2019-08-30'
GROUP BY
project_id,
source,
medium,
campaign
그러나 위의 쿼리는 동일하다고 가정합니다.impressions
카운트는 동일한 날짜에 대해 두 개의 구별된 날짜에 발생하지 않습니다.project_id/source/medium/campaign
표본 데이터에 대해서는 효과가 있지만 필요한 데이터가 아닐 수도 있습니다.
다음 쿼리는 해당 에지 사례에 대해 더 나은 결과를 제공할 수 있습니다(실제로 중복 항목을 집계하기 전에 제거함).
SELECT
project_id,
source,
medium,
campaign,
SUM(impressions) impressions
FROM (
SELECT DISTINCT
stat_date,
project_id,
source,
medium,
campaign,
impressions
FROM mytable
) x
WHERE stat_date >= '2019-08-29' AND stat_date <= '2019-08-30'
GROUP BY
project_id,
source,
medium,
campaign
DB Fiddle에 대한 이 데모에서는 두 쿼리 모두 다음을 반환합니다.
| project_id | source | medium | campaign | impressions |
| ---------- | ------ | ------- | -------- | ----------- |
| 2312 | google | cpc | camp_a | 55 |
| 2312 | google | cpc | camp_c | 44 |
| 2312 | google | organic | camp_b | 12 |
언급URL : https://stackoverflow.com/questions/57759903/how-to-select-unique-rows-by-certain-columns-and-for-each-date-in-sql
반응형
'programing' 카테고리의 다른 글
패싯 그리드의 xlim 및 ylim 설정 방법 (0) | 2023.08.19 |
---|---|
새 줄을 유지하면서 도커 파일에 여러 줄로 명령을 작성하는 방법은 무엇입니까? (0) | 2023.08.19 |
Oracle 트리거에 임의 매개 변수를 보내는 방법은 무엇입니까? (0) | 2023.08.19 |
Capistrano를 사용하여 다른 깃 분기에서 배치 (0) | 2023.08.19 |
처리 방법 :java.util.current.시간 초과예외: Android.os.BinderProxy.finalize()가 10초 오류 후 시간 초과되었습니까? (0) | 2023.08.19 |