programing

SQL에서 특정 열과 날짜별로 고유한 행을 선택하는 방법은 무엇입니까?

muds 2023. 8. 19. 10:55
반응형

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

반응형