Oracle 11g得到两个计数并将它们分开

时间:2016-04-07 03:06:50

标签: sql database oracle oracle11g

我试图得到两个计数并将它们分成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

2 个答案:

答案 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 /计数)。