图片表包含字段sortkey ,imageid
当表的所有排序键值都小于order by image id.
并且所有值都不是order by sortkey ascending
和sortid排序后的imageid时,我希望这样。
我试过
SELECT * FROM image
WHERE 1=1 AND imageobjectid = 1 AND imagetype = 12
ORDER BY CASE sortkey WHEN sortkey>0 THEN sortkey ELSE imageid END LIMIT 1;
SELECT * FROM image
WHERE 1=1 AND imageobjectid = 1 AND imagetype = 12 ORDER BY
(CASE sortkey WHEN sortkey>0 THEN sortkey END) ASC ,
(CASE imageid WHEN !sortkey>0 THEN imageid END) DESC LIMIT 1;
但没有任何效果。 测试用例:
(imageid,sortkey) :
1. (1,0) (2,0)(3,0) -> output (imageid): 3 ,
2. (1,0) (2,1) (3,0) -> output (imageid) : 1 ,
3. (1,2) (2,1) (3,0) -> output (imageid) : 3
我不想使用子查询来做。可以使用子查询,但我正在寻找单一查询的解决方案。
答案 0 :(得分:0)
试试这个:
SELECT * FROM image ORDER BY
if( (SELECT count(image.sortkey ) FROM image WHERE image.sortkey != 0 ) >= 1 ,imageid,sortkey) ASC
答案 1 :(得分:0)
SELECT * FROM image order by sortkey asc,imageid asc;
这将以Sortkey顺序排序记录,然后按图像id顺序排序,如果sortkey全部为零,那么它将自动转为按图像顺序排序
答案 2 :(得分:0)
除非你使用窗口函数,否则我认为你可以在没有某种子查询的情况下完成这个任务。
select
case when max(sortkey) = 0 then max(imageid) else
(select min(imageid) from image i2 where i2.sortkey = min(i.sortkey))
end as imageid
from image i