2015-12-02 3 views
0

EDIT:как суммировать все строки в каждой строке

Я использовал этот запрос:

SELECT emp_name, position, absent, 
sum(absent), 
(SELECT (absent*100)/sum(absent) FROM employee) AS 'percentage' 
FROM employee 

И я получил только одну строку вместо 5.

И I сделал это мнение, чтобы узнать, сколько целей у каждого игрока есть:

CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`localhost` 
    SQL SECURITY DEFINER 
VIEW `world_cup_2014`.`top_scorer` AS 
    SELECT 
     `world_cup_2014`.`players_scored`.`team` AS `team`, 
     `world_cup_2014`.`players_scored`.`player_name` AS `Player`, 
     COUNT(`world_cup_2014`.`players_scored`.`player_name`) AS `Number Of Goals` 
    FROM 
     `world_cup_2014`.`players_scored` 
    GROUP BY `world_cup_2014`.`players_scored`.`player_name` 
    ORDER BY COUNT(`world_cup_2014`.`players_scored`.`player_name`) DESC 

И он отлично работает:

Итак, почему в моей таблице сотрудников я не получаю аналогичный результат, где суммируется?

+0

Ваш второй запрос правильный, просто удалите emp_name или просто выберите только процент, потому что процент - это все, что вам нужно? –

+0

Что ... это ... это ...? Сколько запросов вы задаете здесь? –

+0

Итак, сначала вы хотите суммировать все отсутствующие в таблице? –

ответ

1

Это то, что вы хотите:

SELECT emp_name, position, absent, 
    (SELECT SUM(absent) FROM employee) AS 'absence_sum', 
    ((absent*100)/(SELECT SUM(absent) FROM employee)) AS 'percentage' 
FROM employee 

Вы должны использовать формальный подзапрос на сумму отсутствующих дней, чтобы избежать РСУБД от возвращения одного результата.

+0

, но почему в другой базе данных я не использовал подзапрос, и он отлично работает, см. Раздел редактирования моего вопроса – am90

+0

В вашем примере запроса вы использовали 'sum (absent)', который сообщает СУБД для возврата записи _single_ (AFAIK). Всякий раз, когда вы используете функцию агрегата, он будет собирать все записи, к которым он применяется, в один результат. В случае «GROUP BY» он сворачивает каждую группу в одну. –

0

Используйте это:

SELECT emp_name, position, absent, 
(select sum(absent) from employee) as sum, 
(absent*100)/(select sum(absent) from employee) AS 'percentage' 
FROM employee 
+0

как это будет работать? – Drew

+0

Нет, это дает мне один ряд, пожалуйста, просмотрите мой отредактированный вопрос за минуту – am90

+0

Код ошибки: 1054. Неизвестный столбец 'sum' в 'списке полей' – Drew

Смежные вопросы