需要协助,以简化此SQL查询到单个SELECT:
�
有人告诉我尝试使用GROUP BY和HAVING。但是,我尝试过的任何查询都丝毫不起作用...
任何帮助将不胜感激!
编辑-道歉,忘了提到数据库引擎是MySQL
答案 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
中描述的技术