Странные результаты при запуске SQL IN и NOT IN с использованием Redshift - PullRequest
0 голосов
/ 15 мая 2018
 , v2p AS (
      SELECT DISTINCT video_asin, product_asin 
      from video_table
      where video_asin IN (
            ‘ABC’,
            ‘CDF’,
            ‘DEF’,
            ‘FRW’)
  )
, video_data AS (
  SELECT distinct
      start_date::date,
      video_view,
      video_asin,
      page_asin
  FROM video_metrics
  WHERE 
   page_asin IN (select DISTINCT product_asin from v2p)
    AND start_date between TO_DATE('01/26/2018','MM-DD-YYYY') and TO_DATE('02/04/2018','MM-DD-YYYY') + 0.9999
) 
select sum(video_view) from video_data;

Я выполняю простой запрос, но получаю странные результаты с IN и NOT IN.

(1). Когда я делаю page_asin IN (select DISTINCT product_asin from v2p),, я получаю 1,109,567 как select sum(video_view) from video_data;

(2). Когда я делаю тот же запрос, но с NOT IN page_asin NOT IN (select DISTINCT product_asin from v2p),, я получаю 7,032,405 в виде суммы.

(3). Если я удаляю всю эту строку (page_asin IN (select DISTINCT product_asin from v2p),), чтобы получить все результаты, я получаю 8,148,803. как сумму.

Но я предположил, что если я добавлю (1) и (2), я должен получить (3). Но на самом деле я получаю: 1,109,567 + 7,032,405 = 8,141,972 И НЕ 8,148,803. от (3).

Почему это происходит? Почему мне не хватает ~ 7000 просмотров видео?

1 Ответ

0 голосов
/ 15 мая 2018
Значение

A NULL не будет ни IN, ни NOT IN списком.

Таким образом, page_asin должно быть NULL в некоторых строках.

Как примечание: select distinct является избыточным в подзапросе.Нет причин включать его.

...