Выберите порядок появления столбца без группировки по

В настоящее время у меня есть две таблицы, пользователи и купоны

я быимя
1Роберта
2Оливер
3Шайна
4Фешин
я быскидкаЛогин пользователя
120%1
240%2
315%3
430%1
510%1
670%4

Что я хочу сделать, так это выбрать из таблицы купонов, пока я не выберу X пользователей.

поэтому, если бы я выбрал X = 2, результирующая таблица была бы

я быскидкаЛогин пользователя
120%1
240%2
430%1
510%1

Я пытался использовать как dense_rank, так и row_number, но они возвращают количество вхождений каждого user_id, а не порядок.

SELECT id,
       discount,
       user_id,
       dense_rank() OVER (PARTITION BY user_id)
FROM coupons

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

я быскидкаЛогин пользователяorder_of_occurence
120%11
240%22
315%33
430%11
510%11
670%44

который я затем могу использовать для фильтрации того, что мне нужно.

PS: я использую postgresql.

вам нужно добавить порядок к вашему плотному_рангу

Bryan Dellinger 22.04.2022 20:30

Я думаю, что вы хотите order by id и вообще нет partition by.

shawnt00 22.04.2022 20:39

Спасибо. изменение partition by user_id на order by user_id, похоже, сработало. (не стесняйтесь отвечать, чтобы я мог принять это)

painor 22.04.2022 20:41

Кстати, это лучшее решение моей проблемы (выбор X пользователей). Я не уверен, решаю ли я здесь проблему X Y.

painor 22.04.2022 20:43
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
4
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы заявили, что хотите параметризовать запрос, чтобы получить X пользователей. Я читаю это как все купоны на первые X различных user_ids в купоне id порядок столбцов.

Похоже, ваша попытка была близка. dense_rank() это правильная идея. Поскольку вы хотите просмотреть всю таблицу, вы не можете использовать partition by. И сортировочная колонка также необходима для определения ранжирования.

with data as (
    select *,
        dense_rank() over (order by id) as dr
    from coupons
)
select * from data where dr <= <X>;

Другие вопросы по теме