students_records

+----+-----+-----+-------+
| Sr | SRN | ARN | Marks |
+----+-----+-----+-------+
| 1  | ge  | aj  |  10   |
| 2  | ge  | bd  |   4   |
+----+-----+-----+-------+  

उपरोक्त डेटाबेस से, मैं उन पंक्तियों की संख्या गिनना चाहता हूं, जिनके अंक '<=' 5 से कम हैं और जिनका ARn मान '!=' के बराबर नहीं है " N. तो उपरोक्त उदाहरण के लिए गिनती **1 होनी चाहिए लेकिन मेरे कोड के साथ यह 2 है।

कोड:

SELECT COUNT(Sr) AS Sr FROM students_records WHERE ARN != 'N' AND Marks <= '5'
0
PB Musics 24 नवम्बर 2017, 12:50

2 जवाब

सबसे बढ़िया उत्तर

आदर्श रूप से आपको फ़ील्ड प्रकार को पूर्णांक में बदलना चाहिए जैसा कि संग्रहीत किया जा रहा है। यदि यह संभव नहीं है तो आप फ़ील्ड को क्वेरी समय पर इस प्रकार कास्ट कर सकते हैं:

SELECT COUNT(Sr) AS Sr FROM t WHERE ARN != 'N' AND cast(Marks AS UNSIGNED) <= '5';

लेकिन यह धीमा होने की संभावना है क्योंकि आपको एक बड़ा डेटा सेट मिलता है।

आप इस तरह "5" के आसपास के उद्धरण चिह्नों को हटाकर भी कास्ट का प्रदर्शन कर सकते हैं:

SELECT COUNT(Sr) AS Sr FROM t WHERE ARN != 'N' AND Marks <= 5;
0
Simon Brahan 24 नवम्बर 2017, 13:03

यहां एकमात्र वास्तविक समाधान marks के फ़ील्ड प्रकार को varchar से integer जैसे नंबर डेटा प्रकार में बदलना है।

एक बदसूरत समाधान है

where cast(marks as unsigned) <= 5
0
juergen d 24 नवम्बर 2017, 13:13