的问题是在比较子查询的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-右括号) –