PL/SQL: select 上 select 上的百分比声明变量

PL/SQL: Declaration variable on select within select for percentage

我是 SQL 的新手,主要是通过 YouTube、Google 和一些在线任务学习的。我试图弄清楚如何最好地执行一项简单的任务,以计算出足球场一侧的 'goals' 得分百分比。我不确定这是否是最好的方法,但我尝试过子查询,但也无法弄清楚如何使用它。就像我说的,仍然是新手并且热衷于学习新方法。

以下是我一直在尝试使用的方法。通过计算总进球数(不包括中线的进球数),然后在第二部分将它除以那个数字并乘以 100 得到那一半的百分比。

DECLARE
        l_goal NUMBER(3);
BEGIN
    SELECT COUNT(y_axis) INTO l_goal
    FROM soccer_stats
    WHERE y_axis <> 0;
    DBMS_OUTPUT.PUT_LINE (SELECT ROUND(COUNT(y_axis)/||l_goal)
    FROM soccer_stats
    WHERE y_axis < 0);
END;

下面是我尝试进行子查询。

    SELECT COUNT(y_axis) FROM soccer_stats
    WHERE y_axis <> 0
    (SELECT ROUND(COUNT(y_axis)/6*100) FROM soccer_stats
    WHERE y_axis < 0)
                                ^-------- '6' was the goal number, but could find a way to automate.

如果您能帮我弄清楚我哪里出错了,将不胜感激。谢谢。

我是这样理解题目的。

DECLARE
    l_goal NUMBER(3);
    l_pct  NUMBER;
BEGIN
    -- populate L_GOAL variable
    SELECT COUNT(y_axis) 
      INTO l_goal
      FROM soccer_stats
      WHERE y_axis <> 0;

    -- now use it
    SELECT ROUND(COUNT(y_axis) / l_goal * 100)
      INTO l_pct
      FROM soccer_stats
      WHERE y_axis < 0;

    DBMS_OUTPUT.PUT_LINE('l_goal = ' || l_goal ||', l_pct = ' || l_pct);    
END;

下面的简单 SQL 查询就足够了,

select (yaxiscount/(yaxiscount + nonyaxiscount))*100 yaxispercentage,(nonyaxiscount/(yaxiscount + nonyaxiscount))*100  nonyaxispercentage
from 
(SELECT COUNT(y_axis) yaxiscount
    FROM soccer_stats
    WHERE y_axis >= 0),
    (SELECT COUNT(y_axis) nonyaxiscount
        FROM soccer_stats
        WHERE y_axis < 0)