我正在尝试给表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:
谢谢
答案 0 :(得分:2)
您原来的问题是别名周围的引号。你不需要它们。
同样,您不需要相关子查询。您可以将查询编写为:
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正确地做了平均值,但我习惯这样做。
答案 1 :(得分:1)
尝试将子选择移动到连接(我认为你不需要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或任何其他目前可用的数据库,这都是在我脑海中解析和编译的......)