在 MySQL 中选择每个类别的前几行
要从表中的每个类别中检索有限数量的行,您可以使用分析函数。然而,MySQL 并不直接提供这些功能。不过,可以使用变量来模拟它们。
模拟分析函数
以下 MySQL 查询模拟分析函数的功能,以选择每个类别的前 3 行:
SELECT x.*
FROM (
SELECT t.*,
CASE
WHEN @category != t.category THEN @rownum := 1
ELSE @rownum := @rownum 1
END AS rank,
@category := t.category AS var_category
FROM TBL_ARTIKUJT t
JOIN (SELECT @rownum := NULL, @category := '') r
ORDER BY t.category
) x
WHERE x.rank 解释
- 子查询从 TBL_ARTIKUJT 表中选择所有行并初始化两个会话变量 @rownum 和 @category,跟踪当前排名和类别。
- 分配给每行的排名指示其在其类别中的位置。当遇到新类别时,rank 重置为 1。
- var_category 用于存储每行的类别。
- 外部 SELECT 语句过滤子查询,仅选择具有排名的行小于或等于3。
此方法允许您在不依赖解析函数的情况下实现所需的功能,而解析函数不支持MySQL。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3