Mysql检查预览行没有ID列

时间:2018-01-12 12:17:13

标签: mysql sql

此表没有ID列。这就是我不知道如何比较它的原因。

需要检查预览行,其中KeywordDay字段必须相同。如果没有预览行,则在Ranking中放入1。 如果有预览行,则获取预览Ranking并将其设为Ranking+1并更新字段Ranking

开始表

Keyword    Asin       Day   Ranking
test red  28923    1-1-2018  
test red  98254    1-1-2018  
test red  79845    1-1-2018  
test green 154684  1-1-2018  
test red  28923    2-1-2018  
test red  98254    2-1-2018  
test red  79845    2-1-2018  
test green 154684  2-1-2018  

结果表

Keyword    Asin       Day   Ranking
test red  88923    1-1-2018  1
test red  98254    1-1-2018  2
test red  79845    1-1-2018  3
test green 154684  1-1-2018  1
test red  88923    2-1-2018  1
test red  98254    2-1-2018  2
test red  79845    2-1-2018  3
test green 154684  2-1-2018  1

我想我需要一个连接和嵌套查询。我不确定是否需要创作  像这样的虚拟ID

SET @ID=0;


Select *
FROM
SELECT @ID:=@ID+1 AS ranking, Keyword, Asin, Day, Ranking
  FROM RankingT
;

修改:更改Asin个数字

1 个答案:

答案 0 :(得分:0)

注意:您指定的排名似乎取决于表格的原始顺序。但这没有意义,因为表格代表无序集合。

以下答案提供了解决方案,但排名略有不同。如果你想要一个基于你的订单,那么你需要一个指定排序的列(这可以插入到asin所在的表达式中。)

您可以使用子查询执行此操作:

select t.*,
       (select count(*)
        from t t2
        where t2.keyword = t.keyword and t2.day = t.day and
              t2.asin <= t.asin
       ) as ranking
from t;

也就是说,这对于小型数据集也可以正常工作 - 特别是如果你有t(keyword, day, asin)的索引。对于较大的数据集,变量可能更有效。