51

I want to sort by an column of ints ascending, but I want 0 to come last. Is there anyway to do this in MySql?

Toby Allen
  • 10,997
  • 11
  • 73
  • 124
Roland Rabien
  • 8,750
  • 7
  • 50
  • 67

4 Answers4

132

You may want to try the following:

SELECT * FROM your_table ORDER BY your_field = 0, your_field;

Test case:

CREATE TABLE list (a int);

INSERT INTO list VALUES (0);
INSERT INTO list VALUES (0);
INSERT INTO list VALUES (0);
INSERT INTO list VALUES (1);
INSERT INTO list VALUES (2);
INSERT INTO list VALUES (3);
INSERT INTO list VALUES (4);
INSERT INTO list VALUES (5);

Result:

SELECT * FROM list ORDER BY a = 0, a;

+------+
| a    |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    0 |
|    0 |
|    0 |
+------+
8 rows in set (0.00 sec)
Daniel Vassallo
  • 337,827
  • 72
  • 505
  • 443
3

You can do the following:

SELECT value, IF (value = 0, NULL, value) as sort_order
FROM table
ORDER BY sort_order DESC

Null values will be down of the list.

perfectio
  • 69
  • 3
3
SELECT * FROM your_table ORDER BY 0.1/your_field;
Jijesh Cherayi
  • 1,111
  • 12
  • 15
0

The following query should do the trick.

(SELECT * FROM table WHERE num!=0 ORDER BY num) UNION (SELECT * FROM table WHERE num=0)
SRKX
  • 1,806
  • 1
  • 21
  • 42