Удаление всей записи на основе повторяющихся значений в указанном поле c - PullRequest
0 голосов
/ 16 июня 2020

Вот запрос, который я использую:

Select count(DLOCATION), DLOCATION, DPOSTAL
FROM BURNABYFINAL
Group by DLOCATION, DPOSTAL
order by count(dlocation) desc;

Я хотел бы удалить всю запись, в которой есть дубликат «Dpostal». Я пробовал использовать отдельную функцию, но это привело к ошибке из-за группировки по функции. Любая помощь приветствуется.

Я добавил изображение. Я хотел бы сохранить запись только с наибольшим «счетчиком (местом)». Остальные вхождения следует удалить.

Пример повторяющегося значения почтового индекса выделен желтым

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Ранжируйте строки по количеству и используйте его для окончательного результата.

  • строки 1–11 представляют собой образцы данных (мне было лень вводить все)
  • строки 12 - 17 представляют, что ранжирование Я говорил о
  • строках # 18 и далее извлекается окончательный результат, отфильтровывая все, что не ранжировано как # 1

SQL> with burnabyfinal (dlocation, dpostal) as
  2    (select '3935 Kincaid St Burnaby', 'V5G 2X6' from dual union all
  3     select '3935 Kincaid St Burnaby', 'V5G 2X6' from dual union all
  4     select '3935 Kincaid St Burnaby', 'V5G 2X6' from dual union all
  5     select '1111 Dont want'         , 'V5G 2X6' from dual union all
  6     --
  7     select '203 Sunset'             , 'A4F 2CS' from dual union all
  8     --
  9     select '200 Hastings'           , 'V92 S9V' from dual union all
 10     select '300 Hastings 2nd'       , 'V92 S9V' from dual
 11    ),
 12  temp as
 13    (select count(dlocation) cnt, dlocation, dpostal,
 14       dense_rank() over (partition by dpostal order by count(*) desc) rnk
 15     from burnabyfinal
 16     group by dlocation, dpostal
 17    )
 18  select cnt, dlocation, dpostal
 19  from temp
 20  where rnk = 1
 21  order by cnt desc;

       CNT DLOCATION               DPOSTAL
---------- ----------------------- -------
         3 3935 Kincaid St Burnaby V5G 2X6
         1 300 Hastings 2nd        V92 S9V
         1 200 Hastings            V92 S9V
         1 203 Sunset              A4F 2CS

SQL>
0 голосов
/ 17 июня 2020

Вы можете использовать функцию RANK следующим образом:

SELECT SUM(CNT_DLOCATION), DLOCATION, DPOSTAL
FROM
(Select count(DLOCATION) CNT_DLOCATION, DLOCATION, DPOSTAL, 
       RANK() OVER (PARTITION BY DPOSTAL ORDER BY count(DLOCATION) DESC NULLS LAST) AS RNK
FROM BURNABYFINAL
Group by DLOCATION, DPOSTAL)
WHERE RNK = 1
GROUP BY DLOCATION, DPOSTAL
order by CNT_DLOCATION desc;
...