gpt4 book ai didi

mysql - 简化多个 SELECT 语句的 SQL 查询,每个语句都带有 UNION 和 LIMIT

转载 作者:行者123 更新时间:2023-11-29 10:07:30 26 4
gpt4 key购买 nike

需要帮助将此 SQL 查询简化为单个 SELECT:

(SELECT * FROM `deals`
WHERE category_id = 1
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM `deals`
WHERE category_id = 2
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM `deals`
WHERE category_id = 4
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM `deals`
WHERE category_id = 5
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM `deals`
WHERE category_id = 6
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM `deals`
WHERE category_id = 8
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM `deals`
WHERE category_id = 9
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM `deals`
WHERE category_id = 10
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM `deals`
WHERE category_id = 17
ORDER BY id desc
LIMIT 10)

有人告诉我尝试使用 GROUP BY 和 HAVING。然而,我尝试过的任何查询都没有丝毫效果...

任何帮助将不胜感激!

编辑 - 抱歉,忘记提及数据库引擎是 MySQL

最佳答案

您可以使用窗口函数将其压缩,将每个组存储桶限制为 10。

SELECT
*
FROM
(
SELECT
*,
ROW_NUMBER() OVER PARTITION BY(category_id ORDER BY id DESC) AS GroupOrder
FROM `deals`
WHERE category_id BETWEEN 1 AND 10
)AS X
WHERE
GroupOrder<=10

关于mysql - 简化多个 SELECT 语句的 SQL 查询,每个语句都带有 UNION 和 LIMIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51615946/

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