एसक्यूएल: एक कॉलम में प्रत्येक अलग मूल्य की गिनती कैसे प्राप्त करें?


176

मेरे पास "पोस्ट" नामक एक SQL टेबल है जो इस तरह दिखता है:

id | category
-----------------------
1  | 3
2  | 1
3  | 4
4  | 2
5  | 1
6  | 1
7  | 2

प्रत्येक श्रेणी संख्या एक श्रेणी से मेल खाती है। मैं एक वर्गीय क्वेरी में सभी पोस्ट पर दिखाई देने वाली प्रत्येक श्रेणी की संख्या को गिनने के बारे में कैसे जाऊंगा ?

एक उदाहरण के रूप में, इस तरह की एक क्वेरी इस तरह एक प्रतीकात्मक सरणी वापस कर सकती है: (1:3, 2:2, 3:1, 4:1)


मेरी वर्तमान विधि प्रत्येक संभावित श्रेणी के लिए प्रश्नों का उपयोग करना है, जैसे: SELECT COUNT(*) AS num FROM posts WHERE category=#और फिर अंतिम मानों को एक अंतिम सरणी में संयोजित करें। हालाँकि, मैं एक ऐसे समाधान की तलाश में हूँ जो केवल एक क्वेरी का उपयोग करता है।


जवाबों:


311
SELECT
  category,
  COUNT(*) AS `num`
FROM
  posts
GROUP BY
  category

3
धन्यवाद! यह मैंने सोचा था कि एक बहुत अधिक सरल था!
जेफ गोर्टमेकर

4
@ मिचेल एयर्स: स्रोत?
Moberg

5
"अर्थात, ANSI मानक इसे रक्तस्राव स्पष्ट के रूप में पहचानता है कि आपका क्या मतलब है। COUNT (1) को इस अंधविश्वास के कारण RDBMS विक्रेताओं द्वारा अनुकूलित किया गया है। अन्यथा इसका मूल्यांकन ANSI के अनुसार किया जाएगा" काउंट (*) बनाम काउंट (1)
मिशेल एरेस

@Moberg यह मैंने कैसे सीखा (अंधविश्वास सिखाने वाले पुराने लोग ...)। यहाँ इसके बारे में एक चर्चा के लिए चैट का एक छोटा सा हिस्सा है
मिशेल आयरेस

1
यह "वहां" काम करता है जब आप उदाहरण में मौजूद कॉलम और टेबल नामों का उपयोग करते हैं।
डैन ग्रॉसमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.