abinprogram
2019-07-19 09:09
采纳率: 100%
浏览 857

MySQL如何提取某一字段下,对应不同分类的5条记录?

MySQL新手,遇到一个问题,手上有一张表,需要提取“产品”字段下所有分类的前5条记录。我开始使用GROUP BY 的方式提取,是获取到了每个产品的1条记录,现在的需求是如何获取对应每个产品的5条?逻辑思路上有些理不清。

提取单条记录语句如下:

SELECT * FROM 表名 GROUP BY 产品

尝试用单条件提取可以实现,使用语句为

(SELECT * FROM 表名 WHERE 产品= "A" limit 5)
UNION
(SELECT * FROM 表名 WHERE 产品= "B" limit 5)
UNION
(SELECT * FROM 表名 WHERE 产品= "C" limit 5)

但是我的产品分类很多,这样union下去不是个事,求教如何通过语句直接写出查询每类产品5条记录??看过CSDN里很多类似的,但情境似乎不太一样。

请各位指教,万分感谢

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • 德玛洗牙 2019-07-19 09:44
    已采纳

    分组排序,给每组下的纪录都排一个编号,然后取前五的就行了

    已采纳该答案
    打赏 评论
  • tkzc_shark 2019-07-19 09:19

    建议使用存储过程:获得分类,然后根据分类查找5条。

    打赏 评论
  • threenewbee 2019-07-19 09:24
    打赏 评论
  • 天元白手 2019-07-19 10:20

    试一下这个 select top 5 列名 from 表名 group by 产品

    打赏 评论
  • doncha 2019-07-19 10:25

    https://www.csdn.net/gather_28/MtTaIg1sOTczNi1ibG9n.html

    SELECT
    *
    FROM
    tbl_user AS a
    WHERE
    (SELECT
    COUNT(*)
    FROM
    tbl_user AS b
    WHERE
    b.username = a.username AND b.user_id >= a.user_id) <= 5
    ORDER BY a.username ASC

    打赏 评论
  • a672054126 2019-07-19 10:35

    SELECT
    *
    FROM
    表名 a
    WHERE
    (
    SELECT
    count(*)
    FROM
    表名
    WHERE
    主键 >= a.主键 and 产品 = a.产品

    ) < 6 and a.产品 in("A", "B")
    

    ORDER BY
    a.产品

    打赏 评论
  • program-你懂的 2019-07-23 01:11

    真烧脑~ 就当学习了。

    
    SELECT
        *
    FROM
        (
            SELECT
                *, num = ROW_NUMBER () OVER (
                    partition by 产品ID order by 表主键 desc 
                )
            FROM
                表
        ) T
    WHERE
        num <=5
    

    不过这个是sqlserver的,不知道mysql是不是有相同的关键字
    具体的思路是:用产品ID分组并且加序号,让序号小于6的显示

    打赏 评论

相关推荐 更多相似问题