MySQL - WHERE क्लॉज में COUNT (*) का उपयोग करना


157

मैं MySQL में निम्नलिखित को पूरा करने की कोशिश कर रहा हूं ( pseudoकोड देखें )

SELECT DISTINCT gid
FROM `gd`
WHERE COUNT(*) > 10
ORDER BY lastupdated DESC

क्या ऐसा करने के लिए एक तरीका (चयन ...) का उपयोग किए बिना ऐसा करने का एक तरीका है, क्योंकि यह संसाधनों की बर्बादी की तरह प्रतीत होगा।

जवाबों:


264

इसे इस्तेमाल करे;

select gid
from `gd`
group by gid 
having count(*) > 10
order by lastupdated desc

37
+1 करने के लिए यह हमेशा यह खंड है कि वे SQL पाठ्यक्रम या पुस्तकों पर सही ढंग से पढ़ाने के लिए परेशान नहीं करते हैं और इसके बारे में आम तौर पर यह संकेत है कि कोडर नौसिखिया स्तर से आगे बढ़ गया है।
क्रूचन

क्या होगा यदि आप बूलियन या अभिव्यक्ति के भाग के रूप में COUNT () का उपयोग करने का प्रयास कर रहे हैं? जैसेAND ((stock = 1 OR quantity > 0) OR (COUNT(v.id) > 0)
नैनी

मुझे यह समझ में आया .. आप इस तरह HAVING क्लॉज में जोड़ सकते हैं: HAVING variations > 0 OR (stock = 1 OR quantity > 0)
HAVING

28

मुझे यकीन नहीं है कि आप क्या करने की कोशिश कर रहे हैं ... शायद कुछ पसंद है

SELECT gid, COUNT(*) AS num FROM gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC

1
MSSQL के लिए "अमान्य कॉलम नाम" पार्स त्रुटि देता है num। स्वच्छ सिंटैक्स के लिए वैसे भी +1 (मेरा सेटअप हो सकता है, या एमएस ... आह अच्छी तरह से)।
सैमिस

चयन में सभी स्तंभों के लिए एक उपनाम प्रदान करें।
आदिल खलील

17
SELECT COUNT(*)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC;

EDIT (यदि आप केवल ग्रिड चाहते हैं):

SELECT MIN(gid)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC

धन्यवाद जो, लेकिन वह COUNT लौटाता है () - मैं सभी GID की वापसी कर रहा हूं, जिसमें COUNT (*) अधिक है तो 10

1
इसमें मिन () की कोई आवश्यकता नहीं है।
अली एरसॉज़


14

खंड के बिना बस शैक्षणिक संस्करण:

select *
from (
   select gid, count(*) as tmpcount from gd group by gid
) as tmp
where tmpcount > 10;

13

A WHERE क्लॉज में कुल कार्य (उदाहरण COUNT, MAX, आदि) नहीं हो सकते। इसलिए हम इसके बजाय HAVING क्लॉज का उपयोग करते हैं। इसलिए पूरी क्वेरी इसी तरह होगी:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

6

- लापता आधे घंटे के रिकॉर्ड के साथ मौसम स्टेशनों की खोज करना

SELECT stationid
FROM weather_data 
WHERE  `Timestamp` LIKE '2011-11-15 %'  AND 
stationid IN (SELECT `ID` FROM `weather_stations`)
GROUP BY stationid 
HAVING COUNT(*) != 48;

- जहाँ .. में .. के साथ yapiskan की भिन्नता


1

मुझे लगता है कि आप count()साथ नहीं जोड़ सकते where। अब देखिये क्यों…।

whereसमान नहीं है having, havingइसका मतलब है कि आप काम कर रहे हैं या समूह के साथ काम कर रहे हैं और गिनती के समान काम कर रहे हैं, यह पूरे समूह के साथ भी काम कर रहा है,

अब यह पूरे समूह के रूप में कैसे काम कर रहा है, इसकी गणना करें

एक तालिका बनाएं और कुछ आईडी दर्ज करें और फिर उपयोग करें:

select count(*) from table_name

आपको कुल मान मिलेंगे मतलब यह कुछ समूह को इंगित कर रहा है! इसलिए के whereसाथ जोड़ा जाता है count();


1

COUNT (*) का उपयोग केवल HAVING के साथ किया जा सकता है और इसका उपयोग ग्रुप बाय स्टेटमेंट के बाद किया जाना चाहिए कृपया निम्न उदाहरण देखें:

SELECT COUNT(*), M_Director.PID FROM Movie
INNER JOIN M_Director ON Movie.MID = M_Director.MID 
GROUP BY M_Director.PID
HAVING COUNT(*) > 10
ORDER BY COUNT(*) ASC
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.