当前位置: 首页 > 面试题库 >

MySQL查询:从表中为每个类别选择前3行

蔡辰钊
2023-03-14
问题内容

我有一个带有记录的表,并且有一个名为的行category。我插入了太多文章,并且我只希望从每个类别中选择两篇文章。

我试图做这样的事情:

我创建了一个视图:

CREATE VIEW limitrows AS 
   SELECT * FROM tbl_artikujt ORDER BY articleid DESC LIMIT 2

然后我创建了这个查询:

SELECT * 
FROM tbl_artikujt 
WHERE 
   artikullid IN
   (
      SELECT artikullid
      FROM limitrows
      ORDER BY category DESC
   )
ORDER BY category DESC;

但这不起作用,只给我两个记录吗?


问题答案:

LIMIT仅停止语句返回的结果数。您正在寻找的通常称为分析/窗口/排序功能-MySQL不支持,但您可以使用变量进行仿真:

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 <= 3

如果不进行更改SELECT x.*,则结果集将包含rankvar_category值-如果不是这种情况,则必须指定您真正想要的列。



 类似资料:
  • 问题内容: 我有一个带有表的数据库,看起来像这样: 有数十万条记录。每个可以在7个不同的表之一中,对应于一个表: 我想要一个从每个类别中选择1个随机项目的查询。解决这个问题的最佳方法是什么?我知道使用和用于类似的随机查询,但是我从未做过这样的事情。 问题答案: 此查询以随机顺序返回加入类别的所有项目: 要将每个类别限制为一个类别,请将查询包装在 partial中 : 请注意,当查询同时具有and

  • 问题内容: 我有一个包含69个表的数据库,我只想选择每个表的前三个记录。 我可以在 每个表 上执行以下操作: 但是,如果我要手动执行此操作,则将花费大量时间。 您能建议一个解决方法吗? 我尝试了此解决方案,但可以使其正常工作(我不知道如何针对MSSQL对其进行修改) 编辑 感谢您的答复。我可能还不够清楚:我的意思是我想解析每个单独的表,并且只获得前3个记录,而不是转到下一个表。以下是我需要的Yar

  • 问题内容: 可以说我有一张叫Gamers的桌子。 玩家 包含列,,。 我有兴趣选择每个游戏中得分最高的球员。 例如, 查询后,我希望获得GamerID 4、5和8的行。执行该操作的查询是什么? 问题答案: 试试这个: 这将输出: 您可以做的另一种选择是创建一个临时表或视图(如果您不喜欢子查询)。 然后: 或视图: 然后:

  • 问题内容: 我正在运行此查询 但这不是我想要的结果,它返回多行。 我的一张桌子看起来像这个名字: 另一个表看起来像这个名字: 我如何使其选择查询,以便可以从两个表中获取与之相关的所有值,并使它看起来像这样 所需的输出: 谢谢!(提前!) 问题答案: 为您提供所需的输出(但这并不灵活,因此,如果添加要输出的更多详细信息,将无法进行更改而不进行更改):-

  • 我试图从获取数据。总共有9个表格,我必须相应地从所有表格中显示产品列表。 我考虑过使用连接,并尝试了左连接,如下所示: 这里是主表,pid是从tbl2到tbl9的所有表的。 注意:这里我在所有表上使用了来避免长查询,但是在实际的数据库操作中,只提到特定的列来提高性能。 现在实际的问题是,我没有得到所有的记录从表使用左加入。只检索中对应的每个条目的最后一行。 我使用了GROUP BY来避免重复的左连

  • 如何实现以下作为JPA条件查询的查询:sql JPA标准查询基于id从3个表中选择Table 2 long id; long bpId; String project Name; JPA条件查询根据id从3个表中选择表3长id;字符串empName;字符串contactNum;