的問題是在比較子查詢的ORDER BY
做 - 這不是有效的語法,你可以通過運行下面的查詢,請參閱:
SELECT * FROM dual WHERE dummy IN (SELECT dummy FROM dual ORDER BY dummy);
刪除ORDER BY
子句,您的查詢應該正常運行。另外,如果你想要得到不同的行返回,而你沒有使用聚合函數(例如MAX,SUM等),那麼你應該使用DISTINCT,而不是GROUP BY - 它使你的意圖更清晰。但是,由於您已將結果限制爲僅包含and rownum = 1
的單個行,因此使用這兩個結果沒有多大意義!
您的查詢大概應該是沿着線的東西:
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:我看到,我誤解你原來的略有SQL和誤解你是什麼之後。它看起來像你最高計數p.pids後,所以下面應該怎麼做你後:
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);
如果有兩個或兩個以上不同的p.pids具有最高數, and rownum = 1
確保只有一個將被選中(但它將是隨機的)。您可能希望在外部查詢的比較中使用IN
而不是=
,並且這將刪除對謂詞的需求。
ROWNUM是oracle語法不是mysql ..我已經刪除了mysql標籤 –
'ORDER BY COUNT(P.pid)'應該做些什麼? – Aleksej
[ORDER BY with Inner query,ORA-00907 missing right right brackhesis]可能重複(https://stackoverflow.com/questions/21859866/order-by-with-inner-query-giving-ora-00907-missing-右括號) –