[英]Alias not working in inner join
我試圖給表facturation和內連接中的表成員一個別名,所以我可以在select中的子查詢中使用它像這樣
SELECT description,
Avg((SELECT Count(*)
FROM facturation F
WHERE F.membreid = M.membreid))
FROM v_type_membre
INNER JOIN v_membre M
ON v_type_membre.typeid = M.typeid
INNER JOIN v_facturation
ON M.membreid = v_facturation.membreid
GROUP BY description
ORDER BY description;
為什么我會收到錯誤:
Error at Command Line:3 Column:31
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
謝謝
你原來的問題是別名周圍的引號。 你不需要它們。
同樣,您不需要相關子查詢。 您可以將查詢編寫為:
select description, avg(cnt*1.0) as avg_cnt
FROM v_type_membre INNER JOIN v_membre M
ON v_type_membre.typeid = M.typeid INNER JOIN
v_facturation
ON M.membreid = v_facturation.membreid inner join
(SELECT f.membreid, Count(*) as cnt
FROM facturation F
group by F.membreid
) cnt
on cnt.membreid = M.membreid
GROUP BY description
ORDER BY description;
除了更清晰 - 對某些人來說 - 這也可以讓你包括最小值和最大值,或者計算值為10和42的次數,如果你願意的話。
我還添加了一個“* 1.0”來將計數轉換為浮點數。 在某些數據庫中,整數的平均值是整數,這可能不是您想要的。 Oracle正確地做了平均值,但我習慣這樣做。
嘗試將子選擇移動到連接(我不認為你需要v_facturation連接,我需要更多的信息(我猜v_ *是一個視圖),以確保。);
SELECT description, Avg(F.fact_cnt)
FROM v_type_membre
INNER JOIN v_membre AS M
ON v_type_membre.typeid = M.typeid
-- INNER JOIN v_facturation
-- ON M.membreid = v_facturation.membreid
INNER JOIN (SELECT membreid, Count(*) 'fact_cnt'
FROM facturation group by membreid) AS F
ON F.membreid = M.membreid
GROUP BY description
ORDER BY description;
(對不起,沒有Oracle或任何其他目前可用的數據庫,這都是在我腦海中解析和編譯的......)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.