2017-05-18 5 views
-1

Ich habe eine Frage zu Oracle SQL mit der Unterabfrage.Oracle SQL in Bezug auf Unterabfrage Bedingung

mit einer Tabelle, wie unten

enter image description here

die Frage ist, gezeigt.

"Schreiben Sie eine Abfrage, die den/die Kunden anzeigt, die die maximale Anzahl von Kunden angegeben haben."

Sie können einen Kunden mit max Anzahl der Referenz sehen, wenn Sie diesen Code ausführen,

SELECT cust_referred, COUNT(*) 
FROM customer 
WHERE cust_referred IS NOT NULL 
GROUP BY cust_referred; 

Ich glaube, ich brauche cust_num (vorherige Tabelle) übereinstimmen mit der maximalen Anzahl von Referenz auf cust_referred, die ist 1003 mit 3.

+1

haben Sie selbst etwas probiert? – KeithC

+0

Durch einen Fehler entdecken, können wir nicht sehen, dass ich talbe .. hochgeladen habe ich versucht SELECT cust_num, cust_fname, cust_lname FROM Kunde GROUP BY cust_num, cust_fname, cust_lname MIT cust_num = ( VON cust_referred SELECT (cust_referred SELECT COUNT (*) FROM Kunde WHERE cust_referred IST NICHT NULL GROUP BY cust_referred) WHERE COUNT (*) = MAX (COUNT (*)) ); –

+0

Bitte lesen Sie http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557 und die angenommene Antwort –

Antwort

0

Wenn ich dein Problem richtig verstanden habe, ich denke, das ist, was Sie für

suchen

select cust_num, count(cust_refferred) from customer where cust_referred IS NOT NULL group by cust_num order by 2 desc

+0

Ich denke, Sie sagen, dass ich die erste oder letzte Zeile auswählen kann nach der Bestellung. Allerdings kann ich nur einen auswählen, wenn es mehr als eine maximale Anzahl gibt. –

0

cust_referred ist der Kunde, der die Verweisung gemacht hat. Also ist die Basisabfrage, die Sie wollen,

SELECT cust_referred 
     , COUNT(*) as referrals 
FROM customer 
WHERE cust_referred IS NOT NULL 
GROUP BY cust_referred 
; 

Jetzt wird es eine Top-n Frage.

„Ich kann nicht nur ein, wenn es mehr als eine maximale Anzahl holen ..“

In Oracle 12c ist es die wunderbare Klausel FETCH, die diese einfach macht:

SELECT cust_referred 
     , COUNT(*) as referrals 
FROM customer 
WHERE cust_referred IS NOT NULL 
GROUP BY cust_referred 
order by 2 desc 
fetch first 1 rows with ties; 

Diese (dodgy Englisch Grammatik aber legit Oracle 12c) wird die cust_refered mit der höchsten Anzahl von Empfehlungen, oder alle von ihnen, wenn es ein Unentschieden gibt.

In früheren Oracle-Versionen gibt es mehrere verschiedene Implementierungen, aber sie sind alle klobiger. Zum Beispiel:

with cte as ( 
    SELECT cust_referred 
      , COUNT(*) as referrals 
    FROM customer 
    WHERE cust_referred IS NOT NULL 
    GROUP BY cust_referred 
) 
select * 
from cte 
where cte.referrals = (select max(referrals) from cte) 
/
Verwandte Themen