2015-05-16 26 views
3

是否有任何SQL代码来检查存储在指定列中的值是按照升序还是降序排列?检查列的升序

例如,我想检查此表中列c中的升序。

enter image description here

回答

5

没有,是不是这个特定的语法。最简单的方法可能是获得之前的值,然后检查。下面是一个使用相关子查询的一种方法:

select name, 
     (case when sum(c_prev > c) = 0 then 'All Ascending' 
      else 'Oops' 
     end) 
from (select t.*, 
      (select t2.c 
       from thistable t2 
       where t2.name = t.name and t2.year < t.year 
       order by t2.year desc 
       limit 1 
      ) as c_prev 
     from thistable t 
    ) t 
group by name; 

下面是另一种方法:

select t.name, 
     (case when group_concat(c order by c) = group_concat(c order by year) 
      then 'All Ascending' 
      else 'Oops' 
     end) 
from thistable t 
group by t.name; 

这是它如何处理相等的值稍有不同。此外,这受到group_concat()结果长度上的字符串长度限制(可以通过更改参数使用该长度进行覆盖)。但是,为了某些目的,这可能会很方便。