2010-08-18 14 views
12

मैं जानता हूँ कि एक परिणाम सेट सॉर्ट करने के लिए कैसे:MySQL: कॉलम द्वारा आरोही क्रम में क्रमबद्ध कैसे करें, और शुरुआत के बजाय अंत में न्यूल दिखाएं?

SELECT * FROM `People` ORDER BY `LastName` ASC 

हालांकि, परिणाम है कि शुरुआत में एक खाली अंतिम नाम शो। मैं आरोही क्रम में कैसे क्रमबद्ध करूं, और शुरुआत के बजाय अंत में नल परिणाम दिखाऊं?

उत्तर

11
SELECT 
    * 
FROM 
    People 
ORDER BY 
    CASE WHEN LastName IS NULL THEN 1 ELSE 0 END, 
    LastName 

तुम भी बस

SELECT 
    * 
FROM 
    People 
ORDER BY 
    COALESCE(LastName, 'ZZZZZ') 

तकनीकी तौर पर, दूसरा संस्करण यदि एक व्यक्ति वास्तव में "zzzzzz" की अपनी डीबी में एक अंतिम नाम था विफल हो जाएगा इस्तेमाल कर सकते हैं।

नोट: मुझे यकीन है कि यह सिर्फ इसलिए है क्योंकि आप एक उदाहरण दे रहे हैं, लेकिन मुझे आशा है कि आप वास्तविक उत्पादन कोड में चुनें * उपयोग नहीं कर रहे ... :)

+0

CASE कथन अनावश्यक है। आप इसके बजाय 'LastName IS NULL' का उपयोग कर सकते हैं। – Hammerite

+0

मुझे विश्वास नहीं है कि एएनएसआई अनुपालन है। जबकि सवाल MySQL कहता है, और संक्षिप्त वाक्यविन्यास MySQL में काम कर सकता है, मैं कुछ अतिरिक्त वर्ण टाइप करता हूं और एएनएसआई अनुपालन करता हूं। –

0
SELECT * 
FROM `People` 
ORDER BY case when `LastName` is null then 1 else 0 end, 
    `LastName` 
0

यह करना चाहिए आपके लिए

select *, if(isnull(name), 1, 0) as is_name_null 
from names 
order by is_name_null asc, name asc 
संबंधित मुद्दे