Удалить строки, чтобы сохранить только верхние значения в таблице SQL - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь разместить на своем веб-сайте несколько рекомендаций по продукту.У меня есть эта таблица, которую я сгенерировал, но мне нужно сохранить ограниченное количество записей.

Таблица состоит из этих столбцов (заполняемых некоторыми случайными значениями):

ID | Product ID | Related Product ID | Score
1  |         10 |                111 |   0.1
2  |         10 |                123 |   0.4
3  |         10 |                124 |   0.5
4  |         10 |                125 |   0.4
5  |         10 |                126 |   0.2
6  |         10 |                127 |   0.4
7  |         11 |                111 |   0.1
8  |         12 |                123 |   0.4

Как я могупереписать 10 лучших значений SCORE для каждого ID ПРОДУКТА в этой таблице?

1 Ответ

0 голосов
/ 17 июня 2019

Примечание - вы не сказали, на какой платформе будет работать следующее в SQL Server, Oracle, DB2 и др.

Следующий оператор даст вам 10 первых десяти строк

SELECT * 
FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY PRODUCT_ID ORDER BY SCORE DESC) AS RN
  FROM SOME_TABLENAME_YOU_DID_NOT_SAY
) X
WHERE X.RN < 11

Итак, удалите все остальное

DELETE FROM SOME_TABLENAME_YOU_DID_NOT_SAY
WHERE ID NOT IN
(
  SELECT ID
  FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY PRODUCT_ID ORDER BY SCORE DESC) AS RN
    FROM SOME_TABLENAME_YOU_DID_NOT_SAY
  ) X
  WHERE X.RN < 11
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...