【问题标题】:Getting a row number of a row which is associated with a specific group of rows获取与特定行组关联的行的行号
【发布时间】:2014-06-06 04:57:58
【问题描述】:

我在 MySQL 数据库中有一个表,如下图snap shot

我需要根据每组产品中给定的rating_id(主键)获取当前行号。

目前下面的SQL会根据rating_id从表的所有行中获取一个行号。

SELECT rownum 
FROM   (SELECT @rownum := @rownum + 1 AS rownum, 
               tbl.rating_id 
        FROM   rating tbl, 
               (SELECT @rownum := 0)t 
        ORDER  BY tbl.rating_id DESC)t 
WHERE  rating_id = ?

如何将此查询限制为特定的产品组 (prod_id)?

换句话说,如何从一组特定产品(prod_id)的行中获取行号?

【问题讨论】:

  • AND prod_id BETWEEN x AND y 添加到您的外部选择语句中?
  • 在内部查询中添加 WHERE 或在外部查询中添加 AND(并在 SELECT 部分添加 prod_id)。

标签: mysql sql


【解决方案1】:

我想您需要分别计算每组 PROD_ID。在这种情况下,您应该再添加一个用户定义的变量来存储以前的 PROD_ID 并在新的 PROD_ID 组启动时重置@rownum

SELECT rownum,rating_id,prod_id 
FROM   (SELECT if(prod_id=@prev_prod,@rownum := @rownum + 1,@rownum:=1)
               AS rownum, 
               tbl.rating_id,
               tbl.prod_id,
               @prev_prod:=prod_id  
        FROM   rating tbl, 
               (SELECT @rownum := 1,
                       @prev_prod:=NULL)t 
        ORDER  BY tbl.prod_id)t 
WHERE  rating_id = ?

SQLFiddle demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2013-01-23
    相关资源
    最近更新 更多