【问题标题】:SQL code not working properly. Output keeps changing (Varying)SQL 代码无法正常工作。输出不断变化(变化)
【发布时间】:2022-11-10 09:42:17
【问题描述】:
Select * from 
(SELECT * ,   
    (ROW_NUMBER() OVER(PARTITION BY age) ) as rn FROM `usr`    
ORDER BY  sname ASC ) temp 
where (`rn` = 2) and (location="Sz")

你好, 当我在 phpmyadmin 中测试这段代码时,每次运行它都会返回不同的值。

【问题讨论】:

  • 您没有订购 ROW_NUMBER,因此您无法控制每个 age 返回的哪一行。换句话说,把你当前的ORDER BY放在PARTITION BY之后
  • HoneyBadger 为您提供了为什么您的结果不确定的答案。现在,如果您在编写正确查询方面需要帮助,请告诉我们查询应该做什么。
  • @Thaviraj Junglee 使用 PARTION 您应该在 ORDER BY 查询中创建至少两个参数,以确保输出保持相同

标签: sql row-number


【解决方案1】:

一个表和一个结果集是未分类,只有当你给数据一个ORDER BY 你得到确定的结果。

您的查询也应该看起来喜欢这个,以防你想要第二个。 最老的

但最好像评论中提到的 MatBailie 将另一列作为排序顺序,因为如果很多有 60,我仍然认为你会得到相同的结果,但是为了更好地控制结果,另一列排序会有所帮助。

Select * from 
(SELECT * ,   
    (ROW_NUMBER() OVER(PARTITION BY age ORDER BY age DESC) ) as rn FROM `usr`    
ORDER BY  sname ASC ) temp 
where (`rn` = 2) and (location='Sz')

【讨论】:

  • ORDER BY(不在 ROW_NUMBER 中的那个)在外部查询中也更有意义。另外,我不喜欢不必要的括号,也不喜欢文字字符串周围的双引号
  • mysql不介意双引号,但我会改变它。括号并不重要
  • 我知道 mysql 允许它们,并且括号在功能上并不重要。但是可读性也很重要,当然这是个人喜好
  • PARTITION BY x ORDER BY x 仍然是不确定的。您的 ORDER BY 不应与 PARTITION BY 相同
  • 即使使用相同的列,使用 order by 运行 row_number 也是确定性的。但我同意最好有一个排序列,我会熟练的
猜你喜欢
  • 2021-09-21
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
相关资源
最近更新 更多