Группировка минус проблемы Oracle

Я только что создал этот запрос, и к тому времени, когда я группирую его, я запутался, потому что я не вижу их как одну группу. Этот запрос выполняется, но не так, как я хотел, я хочу сгруппировать запрос по имени команды, но проблема возникает, когда его запрос подсчитывается с помощью count (*) и результат его подсчета дает одно и то же число ,,,

  SELECT TEAM.NAMATEAM, PERSONAL.KODEPERSON
    FROM TEAM,  PERSONAL
   WHERE TEAM.KODETEAM = PERSONAL.KODETEAM
GROUP BY PERSONAL.KODEPERSON, TEAM.NAMATEAM

MINUS 

  SELECT TEAM.NAMATEAM, PERSONAL.KODEPERSON
    FROM TEAM, PERSONAL, AWARD_PERSON 
   WHERE TEAM.KODETEAM = PERSONAL.KODETEAM 
     AND AWARD_PERSON.PEMENANG = PERSONAL.KODEPERSON
GROUP BY TEAM.NAMATEAM, PERSONAL.KODEPERSON;

Я хочу сгруппировать все это, используя имя команды, но использование подсчета будет проблемой, так как я понятия не имею, как сгруппировать технику, которая может работать гладко, как я хотел. Спасибо.


person Community    schedule 24.04.2012    source источник
comment
Я не понимаю вашего вопроса. Чего вы пытаетесь достичь, то есть какой набор результатов вы хотите? Все команды, которые никогда не получали награды?   -  person Ben    schedule 25.04.2012
comment
Спасибо за комментарий, уже решенный пользователем ниже :)   -  person    schedule 25.04.2012


Ответы (1)


Я понимаю ваш вопрос? Вы пытаетесь составить таблицу из столбцов NAMATEAM,X, где NAMATEAM — названия команд, а X — количество людей в каждой команде, не имеющих наград (перечисленных в AWARD_PERSON). Если это так, вы должны иметь возможность использовать дополнительный выбор:

SELECT T_NAME, COUNT(*)
FROM (
    SELECT TEAM.NAMATEAM "T_NAME", PERSONAL.KODEPERSON
    FROM TEAM, PERSONAL
    WHERE TEAM.KODETEAM = PERSONAL.KODETEAM
    MINUS
    SELECT TEAM.NAMATEAM "T_NAME", PERSONAL.KODEPERSON
    FROM TEAM, PERSONAL, AWARD_PERSON
    WHERE TEAM.KODETEAM = PERSONAL.KODETEAM 
    AND AWARD_PERSON.PEMENANG = PERSONAL.KODEPERSON )
    -- your original query without the GROUP BYs
GROUP BY T_NAME

Первый подвыбор SELECT создает полный список игроков, второй подвыбор SELECT создает список игроков, получивших награды (я полагаю), МИНУС удаляет победителей из полного списка. Таким образом, полный подзапрос возвращает список игроков и их команд для всех игроков без наград.

Затем основной SELECT суммирует только название команды, чтобы получить количество игроков без наград в каждой команде.

Вам не нужны исходные GROUP BY TEAM.NAMATEAM, PERSONAL.KODEPERSON, если только у вас нет повторяющихся строк в базе данных, например, у одного игрока в одной команде есть более одной строки в базе данных.

person Peter Raynham    schedule 25.04.2012
comment
select * from ( выберите отдельную команду.название как команду, sum(match_list.scorehome) имя из команды, match_list где match_list.home = team.kodeteam UNION выберите отдельную команду.название как команду, sum(match_list.scoreaway) имя из команды, match_list где match_list.away = team.kodeteam ) группа a.team; Можете ли вы это исправить? - person ; 25.04.2012
comment
В подвыборках удалите DISTINCT, чтобы весь подвыбор возвращал одну строку (TEAM,NOMOR) для каждого сыгранного матча, дома или на выезде. Затем используйте основной SELECT для суммирования по командам с помощью SELECT TEAM, SUM(NOMOR) FROM ( ... ) GROUP BY TEAM. Надеюсь это поможет. - person Peter Raynham; 27.04.2012