简化多个SELECT语句(每个都带有UNION和LIMIT)的SQL查询

时间:2018-07-31 14:35:45

标签: mysql sql union sql-limit

需要协助,以简化此SQL查询到单个SELECT:

有人告诉我尝试使用GROUP BY和HAVING。但是,我尝试过的任何查询都丝毫不起作用...

任何帮助将不胜感激!

编辑-道歉,忘了提到数据库引擎是MySQL

3 个答案:

答案 0 :(得分:1)

您可以使用窗口功能将其压缩下来,以将每个组存储桶限制为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

答案 1 :(得分:0)

我不确定,我需要知道是否需要10个限制,这是否像所有这些中的前10个?

如果不是

SELECT * FROM `deals`
WHERE category_id between 0 and 10 or category_id=17
ORDER BY category_id asc,  id desc

答案 2 :(得分:0)

对于没有窗口功能的旧版MySQL,下面是代码。

SELECT T1.ID, T1.Category_ID, T1.Name
FROM (
SELECT  @row_num := IF(@prev_value=concat_ws('',t.Category_ID),@row_num+1,1) AS RowNumber
         ,t.*
         ,@prev_value := concat_ws('',t.Category_ID)
    FROM data t,
         (SELECT @row_num := 1) x,
         (SELECT @prev_value := '') y
   ORDER BY t.Category_ID
   ) T1
  WHERE T1.RowNumber < 10
  AND T1.Category_ID IN (1,2,3,4,5,6,7,8,9,10)

您需要将必要的字段名称添加到其他选择项中。

这使用了here

中描述的技术