#sql
#sql
Вопрос:
Я застрял на этом, я хотел бы получить количество всех продуктов, за исключением последних 10 продуктов с наименьшим номером продукта.
Я пробовал это, но я знаю, как проверить, правильный код или неправильный, может ли кто-нибудь подтвердить?
SELECT P1.PRODNR FROM PRODUCT P1 WHERE 10 lt; (SELECT COUNT(*) FROM PRODUCT P2 WHERE P1.PRODNR lt; P2.PRODNR)
Ответ №1:
Вы можете сделать это с помощью CTE и row_number
with n as ( select prodnr, Row_Number() over(order by prodnr) rn from products ) select prodnr from n where rngt;10
Ответ №2:
Subquery
чтобы получить список низких чисел для исключения
SELECT P1.PRODNR FROM PRODUCT P1 WHERE PRODNR not in (SELECT top 10 PRODNR FROM PRODUCT P2 order by PRODNR) -- assuming product number is a number
Комментарии:
1. Это, скорее всего, вызовет ошибку, если подзапрос вернет более 1 строки, которая вам нужна
max(prodnr)
.2. правда..
not in
должно хватить3. это дает мне ошибку. синтаксис в строке 4. например: это отлично подходит для поиска трех самых высоких номеров продуктов. ВЫБЕРИТЕ P1.PRODNR ИЗ ПРОДУКТА P1, ГДЕ 3 gt; (ВЫБЕРИТЕ КОЛИЧЕСТВО(*) ИЗ ПРОДУКТА P2, ГДЕ P1.PRODNR gt;
4. измените свою операцию, если хотите найти другое решение
5. значит, мой запрос выше (в основном вопросе) должен быть правильным?
Ответ №3:
Мне пришлось изменить вход оператора в подзапросе
SELECT P1.PRODNR FROM PRODUCT P1 WHERE 25 lt;= (SELECT COUNT(*) FROM PRODUCT P2 WHERE P1.PRODNR gt; P2.PRODNR)
Ответ №4:
Вот еще один способ выполнить вашу задачу:
SELECT P1.PRODNR FROM PRODUCT P1 WHERE P1.PRODNR lt; (select min(prodnr) from (SELECT top 10 PRODNR FROM PRODUCT P2 ORDER BY PRODNR DESC) P3 )
Комментарии:
1. топ-10 возвращающихся неупорядоченных списков
2. @RoMEoMusTDiE не имеет значения, заказаны они или нет. MIN() выберет самый низкий из них
3. если список-это
1-22
только вашtop 10
возвращенныйrandom numbers
т. е.1,2,3,11,20,21,22,10,6,4
так каков ваш минимальный номер?4. @RoMEoMusTDiE Я соответствующим образом обновил свой ответ. Спасибо