选择列的事件顺序没有组。

发布于 2025-01-23 11:15:31 字数 1927 浏览 0 评论 0原文

我目前有两张桌子,用户和优惠券

IDfirst_name
1roberta
2oliver
3shayna
4fechin
ID折扣用户_id
120%1
240%2
315%3
430%1
510%1
670%4

我想要什么做是从优惠券表中选择,直到我选择X用户。

因此,如果我选择x = 2,则结果表将是

ID折扣User_id
120%1
240%2
430%1
510%1

我尝试使用dense_rankrow_number,但他们返回每个用户_ID的出现计数,而不是订单。

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

我猜我需要在多个子征服(很好)中进行此操作,其中第一个子查询将返回诸如

ID折扣user_idorder_of_of_occurence
120%12
4022
315%3 15%33
430%11 1
510%11
670%44

,然后我可以用它来过滤我的需求。

PS:我正在使用PostgreSQL。

I currently have two tables, users and coupons

idfirst_name
1Roberta
2Oliver
3Shayna
4Fechin
iddiscountuser_id
120%1
240%2
315%3
430%1
510%1
670%4

What I want to do is select from the coupons table until I've selected X users.

so If I chose X = 2 the resulting table would be

iddiscountuser_id
120%1
240%2
430%1
510%1

I've tried using both dense_rank and row_number but they return the count of occurrences of each user_id not it's order.

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

I'm guessing I need to do it in multiple subqueries (which is fine) where the first subquery would return something like

iddiscountuser_idorder_of_occurence
120%11
240%22
315%33
430%11
510%11
670%44

which I can then use to filter by what I need.

PS: I'm using postgresql.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忘东忘西忘不掉你 2025-01-30 11:15:31

您已经说过要参数化查询,以便可以检索X用户。我正在阅读它,因为第一个X Difinse user_id s 的所有优惠券id column>列顺序

看来您的尝试很近。 dense_rank()是正确的想法。由于您想查看整个表,因此无法使用使用分区。还需要一个分类列来确定排名。

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

You've stated that you want to parameterize the query so that you can retrieve X users. I'm reading that as all coupons for the first X distinct user_ids in coupon id column order.

It appears your attempt was close. dense_rank() is the right idea. Since you want to look over the entire table you can't use partition by. And a sorting column is also required to determine the ranking.

with data as (
    select *,
        dense_rank() over (order by id) as dr
    from coupons
)
select * from data where dr <= <X>;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文