PL / SQL: переменная объявления при выборе в пределах выбора для процента - PullRequest
0 голосов
/ 08 мая 2020

Я новичок в SQL и учился в основном с помощью YouTube, Google и некоторых онлайн-задач. Я пытаюсь выяснить, как лучше всего выполнить простую задачу, чтобы определить, какой процент «голов» был забит на одной стороне футбольного поля. Я не уверен, что это лучший подход, но попытался выполнить подзапрос и не могу понять, как заставить это работать с этим. Как я уже сказал, он все еще новичок и очень хочет изучить новый метод.

Следующий метод, который я пытался использовать. Подсчитав общее количество голов (исключая голов от центральной линии), затем во второй части разделив его на это число и умножив на 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.

Если бы вы могли помочь мне понять, где я ошибаюсь, я был бы очень признателен. Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Простой 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)
0 голосов
/ 08 мая 2020

Вот как я понял вопрос.

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;
...