2009-08-28 19 views
6

questo è il mio codice per ora:Ordina per nulla, poi ordinare da altre variabili

SELECT id, number 
FROM Media 
WHERE user = 10 
ORDER BY id, number 

ma voglio farlo sembrare come:

SELECT id, number 
FROM Media 
WHERE user = 10 
ORDER BY while(number IS NULL), id 

Quello che voglio fare è di avere tutto number che sono NULL sulla parte superiore del risultato, ma non appena number non è NULL, ordina per id

è possibile?

Io uso mysql.

risposta

19

che dire qualcosa di simile:

SELECT id, number 
FROM Media 
WHERE user = 10 
ORDER BY (case when number is null then 0 else 1 end), id 

Se il numero è NULL, il primo ordine da criteri sarà 0; altrimenti 1
Il che significa che ogni riga conterrà NULL prima degli altri

E si noti che anche gli ID verranno ordinati.

Otterrete qualcosa di simile:

  • numero null; id = 1
  • numero null; id = 2
  • numero null; id = 5
  • numero null; id = 8
  • numero non nullo; id = 3
  • numero non nullo; id = 4
  • numero non nullo; id = 7
  • numero non nullo; id = 10
  • numero non nullo; id = 12
+0

Ecco come faccio normalmente anche io. – RiddlerDev

+0

Eccellente! Risposta veloce, e ha funzionato la prima volta che ho provato. Grazie! – Johan

+0

Prego :-) buon divertimento! –

-1

Unione potrebbe anche essere utilizzato.

SELECT id, number 
FROM Media 
WHERE user = 10 AND number IS NULL 
ORDER BY id 

UNION 

SELECT id, number 
FROM Media 
WHERE user = 10 AND number IS NOT NULL 
ORDER BY id, number; 
+0

A parte una sintassi leggermente errata (parentesi mancante), questo non ha senso perché il 'UNION' non garantirà la conservazione dell'ordine di selezione individuale. Inoltre, questo produce un piano di esecuzione inutilmente costoso (due controlli 'NULL' sulla colonna' numero'). –

1

La funzione ISNULL() restituisce 1 se il parametro è nullo e 0 altrimenti.

SELECT id, number 
FROM Media 
WHERE user = 10 
ORDER BY ISNULL(number) DESC, id 

Intendiamoci, terribile per le prestazioni a seconda di quanti valori di cui ha bisogno per ordinare: nessun indice verrà utilizzato in base all'ordine da colonne.

Problemi correlati