gpt4 book ai didi

mysql - 如何使用带有行号的mysql分区按类型返回项目

转载 作者:行者123 更新时间:2023-11-29 15:30:48 25 4
gpt4 key购买 nike

我尝试使用 mysql PARTITION 和多个 INNER JOIN 从数据库表中选择记录,根据产品类型,每个返回 3 条记录。

现在面临的问题是,用户正在选择“GROCERY、FOOD and DRINK”中超过 5 种产品类型的记录,但我的查询将返回 3 种饮料、2 种杂货和 1 种食物,即使我更改了分区限制它仍然没有按预期返回。

这是我的查询

SELECT sl.business_name, sl.business_country, sl.seller_private_key,  p.product_name, p.product_id,  p.product_price,  p.product_type, p.product_added_date, p.product_seller_key
FROM (
SELECT p.product_name, p.product_id, p.product_price, p.product_type, p.product_added_date, p.product_seller_key,
ROW_NUMBER() OVER(PARTITION BY p.product_type ORDER BY p.product_type) AS limit_group
FROM seller_stores_products p
WHERE p.product_availability IN(1,2)
) p

INNER JOIN seller_account sl
ON p.product_seller_key = sl.seller_private_key

INNER JOIN seller_stores st
ON st.store_seller_key = sl.seller_private_key

WHERE limit_group <= 5

AND sl.seller_private_key = "t9HfbiEDzIXyHjvx57uI"
GROUP BY p.product_id

ORDER BY sl.seller_private_key ASC, p.product_added_date DESC
LIMIT 25

Also a fiddle here

预期结果是仅当每种产品类型超过 3 条记录时才最多选择 3 条记录。

最佳答案

我想您需要以下查询 -

SELECT business_name
,business_country
,seller_private_key
,product_name
,product_id
,product_price
,product_type
,product_added_date
,product_seller_key
FROM (SELECT sl.business_name
,sl.business_country
,sl.seller_private_key
,p.product_name
,p.product_id
,p.product_price
,p.product_type
,p.product_added_date
,p.product_seller_key
,ROW_NUMBER() OVER(PARTITION BY p.product_type ORDER BY p.product_type) AS limit_group
FROM seller_stores_products p
JOIN seller_account sl ON p.product_seller_key = sl.seller_private_key
WHERE sl.seller_private_key = "t9HfbiEDzIXyHjvx57uI"
AND p.product_availability IN(1,2)
ORDER BY sl.seller_private_key ASC, p.product_added_date DESC
LIMIT 25) X
WHERE limit_group <= 3

Here是演示。

关于mysql - 如何使用带有行号的mysql分区按类型返回项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58748835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com