Das Problem ist, mit dem ORDER BY
im Vergleich Unterabfrage zu tun - es ist nicht eine gültige Syntax, die Sie, indem Sie die folgende Abfrage sehen können:
SELECT * FROM dual WHERE dummy IN (SELECT dummy FROM dual ORDER BY dummy);
Entfernen Sie die ORDER BY
-Klausel, und Ihre Abfrage sollte ohne Problem ausgeführt werden.
Wenn Sie möchten, dass bestimmte Zeilen zurückgegeben werden und Sie keine Aggregatfunktion verwenden (z. B. MAX, SUMME usw.), sollten Sie DISTINCT, nicht GROUP BY verwenden. Dadurch wird Ihre Absicht deutlich klarer . Da Sie die Ergebnisse jedoch auf eine einzelne Zeile mit and rownum = 1
beschränkt haben, ist es auch nicht sinnvoll, sie zu verwenden!
Ihre Abfrage sollte wahrscheinlich etwas entlang der Linien der folgenden sein:
SELECT DISTINCT bg.name
FROM brand_group bg
WHERE bg.pid = (SELECT p.pid
FROM indicia_publisher ip
LEFT JOIN publisher p
ON ip.pid = p.pid
WHERE ip.cid = (SELECT country.cid
FROM country
WHERE country.name = 'Belgium') AND rownum <= 1);
ETA: Ich sehe, dass ich Ihre ursprüngliche SQL etwas falsch verstanden und falsch interpretiert, was Sie nach waren. Es sieht aus wie Sie nach den p.pids mit der höchsten Zählung sind, so ist folgendes zu tun, was Sie nach:
SELECT DISTINCT bg.name
FROM brand_group bg
WHERE bg.pid = (SELECT p.pid
FROM (SELECT p.pid,
COUNT(*) cnt,
MAX(COUNT(*)) OVER (PARTITION BY p.id) max_cnt
FROM indicia_publisher ip
LEFT JOIN publisher p
ON ip.pid = p.pid
WHERE ip.cid = (SELECT country.cid
FROM country
WHERE country.name = 'Belgium')
GROUP BY p.pid)
WHERE cnt = max_cnt
AND ROWNUM = 1);
Wenn es zwei oder mehr verschiedene p.pids, die die höchste Zählung haben, Die and rownum = 1
stellt sicher, dass nur eine ausgewählt wird (aber es wird zufällig sein). Möchten Sie IN
lieber als =
im Vergleich der äußeren Abfrage verwenden, und das würde die Notwendigkeit für das rownum = 1
Prädikat entfernen.
ROWNUM ist Oracle-Syntax nicht mysql .. Ich habe das mysql-Tag entfernt –
Was sollte 'ORDER BY COUNT (P.pid)' tun? – Aleksej
Mögliches Duplikat von [ORDER BY mit Innerer Abfrage, wobei ORA-00907 fehlende rechte Klammer fehlt] (https://stackoverflow.com/questions/21859866/order-by-with-inner-query-giving-ora-00907-missing- rechte Klammer) –