【问题标题】:MySQL : How to order by two or more columns and the NULL's value will be last?MySQL:如何按两列或更多列排序,NULL 的值将在最后?
【发布时间】:2014-04-05 18:30:15
【问题描述】:

尝试将列名不为空作为第一列,如果第一列为空但不是第二列不为空等等。

表:

id  name1 name2  name3
1.   a     b      
2.   a1            c
3.         b1      c1
4.                 c2
5.                 c3
6.   a2    
7.         b2      c4
8.   a3

预期结果

id 
1 
2
6
8
3
7
4
5   

我尝试使用 COALESCE AND IFNULL 但它返回零结果。

【问题讨论】:

  • 考虑提供适当的 DDL(和/或 sqlfiddle)。
  • ORDER BY IF(ISNULL(my_field),1,0),my_field;
  • 这个架构可能会从规范化中受益。

标签: php mysql coalesce


【解决方案1】:

COALESCE(<strong><em>value</em></strong>,...) 中所述:

返回列表中的第一个非NULL 值,如果没有非NULL 值,则返回NULL

mysql> SELECT COALESCE(NULL,1);
        -> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
        -> NULL

IS NULL 中所述:

测试一个值是否为NULL

mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
        -> 0, 0, 1

因此:

SELECT   id
FROM     Table1
ORDER BY COALESCE(name1, name2, name3) IS NULL,
         COALESCE(name1, name2, name3)

sqlfiddle 上查看。

这首先对所有三列是否为NULL 进行排序(那些的将有一个IS NULL结果为一,这将排在那些不是之后em> 结果为零);然后是第一个非NULL 列的实际值。

【讨论】:

  • 当我在活动记录中尝试此操作时,查询显示错误:$this->db->order_by("COALESCE(name1,name2) IS NULL");
  • @AaruKarthiga:我应该猜测显示的错误是什么,还是你要告诉我?
猜你喜欢
  • 2023-03-09
  • 2015-06-21
  • 2012-09-13
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多