2008-11-19 13 views
118

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

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

वहाँ एक का उपयोग किए बिना यह करने के लिए एक रास्ता है (COUNT का चयन करें (*) का उपयोग करते हुए ...) WHERE खंड में क्योंकि यह संसाधनों की बर्बादी की तरह प्रतीत होता है।

सभी मदद की सराहना की जाती है।

धन्यवाद!

उत्तर

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

संपादित करें (आप बस GIDs चाहते हैं):

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

धन्यवाद जो लेकिन यह है कि गणना देता है() - मैं सभी gid का जो एक COUNT (*) से अधिक 10 –

+1

की कोई जरूरत नहीं है वापस जाने के लिए देख रहा हूँ वहां न्यूनतम()। –

206

इस कोशिश;

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

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

+0

धन्यवाद! यह –

+0

काम करता है मेरी समस्या भी ठीक है, बहुत बहुत धन्यवाद। –

21

मैं तुम्हें ... शायद कुछ ऐसा

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

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

+0

चयन में सभी कॉलम के लिए उपनाम प्रदान करें। –

12

कोशिश करने के लिए कोशिश कर रहे हैं के बारे में यकीन नहीं है

SELECT DISTINCT gid 
FROM `gd` 
group by gid 
having count(*) > 10 
ORDER BY max(lastupdated) DESC 
+0

धन्यवाद! यह काम करता हैं –

4

- लापता आधे के साथ मौसम स्टेशनों के लिए खोज -

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

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

where नहीं having के रूप में ही,

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

एक तालिका बनाने के लिए और कुछ पहचान-पत्र दर्ज करें और फिर उपयोग करें:

select count(*) from table_name 

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

9

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

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

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

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; 
संबंधित मुद्दे