我试图得到两个计数并将它们分成Oracle 11g
...我尝试了两个版本
1)
SELECT
x.number/y.number
FROM
(
SELECT
COUNT(*) as "number"
FROM
GAME
WHERE
HOMETEAM='Blackpool'
AND FTR='H'
OR AWAYTEAM='Blackpool'
AND FTR='A'
) x
join (
SELECT COUNT(*) as "number"
FROM GAME
WHERE HOMETEAM='Blackpool'
OR AWAYTEAM='Blackpool'
)y;
我收到以下错误
ORA-01747:user.table.column,table.column或column无效 规格 01747. 00000 - " user.table.column,table.column或列规范无效"
*原因:
*动作:行错误:1列:10
2)
select
(
SELECT COUNT(*)
FROM GAME
WHERE HOMETEAM='Blackpool'
AND FTR='H'
OR AWAYTEAM='Blackpool'
AND FTR='A'
) /
(
SELECT COUNT(*)
FROM GAME
WHERE HOMETEAM='Blackpool'
OR AWAYTEAM='Blackpool'
);
我运行这个之后..我得到以下错误
ORA-00923:找不到FROM关键字 00923.&00;"在预期的地方找不到FROM关键字" *原因:
*动作:行错误:3列:84
答案 0 :(得分:3)
SELECT x."number"/y."number"
FROM
(SELECT COUNT(*) as "number"
FROM GAME
WHERE HOMETEAM='Blackpool' AND FTR='H' OR AWAYTEAM='Blackpool' AND FTR='A') x
cross join
(SELECT COUNT(*) as "number"
FROM GAME
WHERE HOMETEAM='Blackpool' OR AWAYTEAM='Blackpool') y;
Number
是保留字。如果你坚持使用它,那么总是使用" (双引号)。
如果您不打算使用任何ON子句,请使用CROSS JOIN
。您也可以使用JOIN ON 1 = 1
select
(SELECT COUNT(*)
FROM GAME
WHERE HOMETEAM='Blackpool' AND FTR='H' OR AWAYTEAM='Blackpool' AND FTR='A')
/
(SELECT COUNT(*)
FROM GAME
WHERE HOMETEAM='Blackpool' OR AWAYTEAM='Blackpool')
from dual
添加From dual
,它会正常工作。
答案 1 :(得分:0)
我有两个例子,说明我过去使用过的查询。第一个获得按STATUS分组的ITEM计数的百分比,第二个具有百分比,但是四舍五入:
SELECT
STATUS,
COUNT(ITEMNUM) AS NUMBER_OF_ITEMs,
(COUNT(ITEMNUM) / (SELECT COUNT(ITEMNUM) FROM WOSTATUS WHERE DATE >= to_date('2015-01-01','YYYY-MM-DD'))) AS PERCENT_OF_ITEMs
FROM
ITEMS
WHERE
DATE >= to_date('2015-01-01','YYYY-MM-DD')
GROUP BY
STATUS
ORDER BY
STATUS ASC
我在浮动中四舍五入到数字,但你可以根据自己的需要改变它。
SELECT
STATUS,
COUNT(ITEMNUM) AS NUMBER_OF_ITEMs,
ROUND((COUNT(ITEMNUM) / (SELECT COUNT(ITEMNUM) FROM WOSTATUS WHERE DATE >= to_date('2015-01-01','YYYY-MM-DD'))), 4) AS PERCENT_OF_ITEMs
FROM
ITEMS
WHERE
DATE >= to_date('2015-01-01','YYYY-MM-DD')
GROUP BY
STATUS
ORDER BY
STATUS ASC
从这些查询中,我得到一个表格,显示前两列中STATUS的ITEM计数,以及最终的ITEM总数百分比(所有ITEM的1个ITEM /计数)。