【问题标题】:MySQL sort by subquery result. Null last, > 0 as 1MySQL 按子查询结果排序。空最后,> 0 为 1
【发布时间】:2021-03-02 17:23:46
【问题描述】:

我有一个查询,我想以特定方式排序。首先,如果“antall”> 0,我希望它被排序为 1,以便 antall > 0 的每一行都将在内部由 a.tittel 排序。如果 antall IS NULL 我希望它是最后一个。

SELECT a.tittel,
(SELECT SUM(antall) FROM butikk_lager WHERE butikkdata_nr=ai.valueNumber 
    AND lokasjon NOT LIKE 'Uts%' AND lokasjon NOT LIKE 'Rekl%' 
    AND ( varenr='TK180126' OR variant_artid LIKE '%TK180126%' ) LIMIT 0,1 ) AS antall
FROM artikler AS a 
JOIN kategorier AS k ON a.kategori_id=k.id 
JOIN artikler_innhold AS ai ON a.id=ai.artId AND ai.feltId=22
WHERE k.type=24 ORDER BY ?, a.tittel 

【问题讨论】:

    标签: mysql sql subquery sql-order-by sql-null


    【解决方案1】:

    如果您特别希望 antalNULL 时排在最后,那么:

    order by (antal is not null) desc, title desc
    

    不过,我认为 GMB 的降序解决方案也应该可行。

    【讨论】:

      【解决方案2】:

      考虑:

      order by (antal > 0) desc, a.title
      

      如果antal 大于0,则(antal > 0) 产生1,如果它小于等于0,则产生0,如果它是null,则产生null。您可以对其进行降序排序:当按该方向排序时,MySQL 将 nulls 放在最后。

      【讨论】:

      • 它不会把NULL放在最后吗?
      • @johnohod:是的,如答案中所述。试试这个查询。
      • 很抱歉,我的数据库中没有将 NULL 放在最后
      • @johnohod:这太令人惊讶了。你能设置一个db fiddle 来演示这个问题吗?
      • 涉及到一些复杂的表。但我试图用实际的子查询替换“antall”,然后你的解决方案就可以工作了。所以我想我只是不能使用“antall”来排序。
      猜你喜欢
      • 1970-01-01
      • 2017-07-25
      • 2011-08-05
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      相关资源
      最近更新 更多