मैं एक प्रश्न का उत्तर देने के लिए कुख्यात "सिटीजेल" स्कीमा का उपयोग कर रहा हूं "उन सभी अपराधियों के नाम सूचीबद्ध करें जिन्होंने औसत से अधिक अपराध किए हैं और हिंसक अपराधियों के रूप में सूचीबद्ध नहीं हैं।"

यहाँ मेरा कोड है:

SELECT first, last 
FROM criminals NATURAL JOIN
crimes
GROUP BY first, last
HAVING COUNT(*) > (SELECT AVG(COUNT(DISTINCT crime_id))
FROM crimes)
AND (SELECT v_status = 'N' FROM crimes)
GROUP BY first, last
);

लेकिन मुझे एक त्रुटि मिलती है:

ORA-00936: लापता अभिव्यक्ति ००९३६. ००००० - "लापता अभिव्यक्ति" *कारण:
*क्रिया: लाइन में त्रुटि: 7 कॉलम: 22

जब मैं अपना कोड इसमें बदलता हूं:

SELECT first, last 
FROM criminals NATURAL JOIN
crimes
GROUP BY first, last
HAVING COUNT(*) > (SELECT AVG(COUNT(DISTINCT crime_id))
FROM crimes)
AND v_status = 'N'
GROUP BY first, last
);

मुझे एक त्रुटि मिलती है:

ORA-01787: प्रति क्वेरी ब्लॉक में केवल एक क्लॉज की अनुमति है 01787. 00000 - "प्रति क्वेरी ब्लॉक केवल एक खंड की अनुमति है" *कारण:
*क्रिया: लाइन में त्रुटि: 8 कॉलम: 1

मैं क्या गलत कर रहा हूं?

अपराधी:

Name        Null?    Type         
----------- -------- ------------ 
CRIMINAL_ID NOT NULL NUMBER(6)    
LAST                 VARCHAR2(15) 
FIRST                VARCHAR2(10) 
STREET               VARCHAR2(30) 
CITY                 VARCHAR2(20) 
STATE                CHAR(2)      
ZIP                  CHAR(5)      
PHONE                CHAR(10)     
V_STATUS             CHAR(1)      
P_STATUS             CHAR(1)    

अपराध:

Name            Null?    Type      
--------------- -------- --------- 
CRIME_ID        NOT NULL NUMBER(9) 
CRIMINAL_ID     NOT NULL NUMBER(6) 
CLASSIFICATION           CHAR(1)   
DATE_CHARGED             DATE      
STATUS                   CHAR(2)   
HEARING_DATE             DATE      
APPEAL_CUT_DATE          DATE      
DATE_RECORDED            DATE      
0
Alan Shore 7 अक्टूबर 2020, 17:59

1 उत्तर

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

होइंग क्लॉज में अपनी स्केलर सबक्वेरी ठीक करें

  SELECT first
      , last
   FROM criminals cls
NATURAL
   JOIN crimes 
  WHERE v_status = 'N'
  GROUP BY first
      , last
 HAVING COUNT(1) >(
         SELECT AVG(COUNT(DISTINCT crime_id))
   FROM crimes
   GROUP BY criminal_id);
  

आपके दोनों प्रयासों में अदिश क्वेरी विकृत है।

मैंने शर्त WHERE v_status = 'N' को मुख्य प्रश्न में स्थानांतरित कर दिया (आप केवल उस अपराधी के बारे में चिंतित हैं जो अहिंसक हैं)।

1
Patrick Bacon 7 अक्टूबर 2020, 21:20