Skip to content
Advertisement

In MySQL, when ordering by more than one conditions, how do I treat “false” the same way as “null”?

I have a select statement where I want to order by a boolean column first, then order by a date column, and the goal is to put records with boolean = true at the top, then for the records with boolean = false OR boolean is NULL, they should be sorted by the date column`.

The statement is like

select *
from some_table
order by some_table.boolean_column desc, some_table.date_column desc

However, the issue is when a record’s boolean_column is false (or 0), it is not sorted by date_column with those whose boolean_column is NULL, because 0 is consider larger than null, so this record is places ahead of others whose boolean_column is NULL, though its date_column is not the most recent.

I want to treat boolean_column = 0 the same way as boolean_column is null.

Could anyone teach me how to do that?

Advertisement

Answer

Just use an expression:

order by coalesce(some_table.boolean_column,0) desc, ...
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement