MySQL Query. Извлечение суммы (общая) и суммы (общая) с условием - PullRequest
1 голос
/ 20 мая 2011

Мой вопрос о My SQL:

У меня есть таблица, в которую пользователи вводят данные отчетов о времени, называемые time_report.Каждый time_report вводится с сервисным кодом, каждый из которых имеет различное значение и включает в себя начало, остановку, время и общее количество.

Вот пример данных, введенных в таблицу time_report.

t_id Date User Customer Service Closing System  Part    Start   Stop    Total

53 2011-05-02 13 0   48 4   0   0   09:00   17.15   8.15

54 2011-05-03 13 0   49 4   0   0   09:00   17:00    8

55 2011-05-04 13 0   48 4   0   0   09:00   17.15   8:15

61 2011-05-04 1  0  52  4   0   0   09:00   17.15   8:15

62 2011-05-05 1  0  48  4   0   0   09:00   17.15   8:15

Я пытаюсь выполнить запрос для извлечения 3 частей информации.

user ( the user is the foreign key to users.user_id)
sum(total) per user.
sun(total) per user where service < 49 
Utilization Percentage: (This will be calculated by dividing the 2 totals )

Служба - это внешний ключ для servicecodes.s_id

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

mysql> SELECT  Users.full_name,sum(total)

    -> FROM time_report, users
    -> WHERE time_report.User = users.user_id
    -> AND date
    -> BETWEEN '2011-0502'
    -> AND '2011-05-11'
    -> GROUP BY User;
+-----------------+------------+
| full_name       | sum(total) |
+-----------------+------------+
| Cian Higgins    |         26 |
| Wallace Ward    |         23 |
| jason ward      |         42 |
| Thomas Woods    |         72 |
| Peter Jones     |         49 |
| fintan corrigan |         40 |
| David Jones     |         35 |
| January Jones   |         23 |
| Joe Johnson     |         24 |
+-----------------+------------+
9 rows in set, 1 warning (0.09)

Когда я запускаю запрос со службой <49 </p>

SELECT  Users.full_name,sum(total) AS Productive

FROM time_report, users
WHERE time_report.User = users.user_id
AND date
BETWEEN '2011-0502'
AND '2011-05-11'
AND Service < 49
GROUP BY User;
+-----------------+------------+
| full_name       | Productive |
+-----------------+------------+
| Cian Higgins    |         14 |
| Wallace Ward    |         23 |
| jason ward      |         33 |
| Thomas Woods    |         53 |
| Peter Jones     |         41 |
| fintan corrigan |         32 |
| David Jones     |         27 |
| January Jones   |         23 |
| Joe Johnson     |         24 |
+-----------------+------------+
9 rows in set, 1 warning (0.03 sec)

Но если я пытаюсьи присоединяюсь к отчетам, я получаю ошибки .... также, если я пытаюсь запустить его как подзапрос, я получаю ошибки

Пример:

SELECT Users.full_name, sum( total ) 
FROM time_report, users
WHERE time_report.User = users.user_id
AND date
BETWEEN '2011-0502'
AND '2011-05-11'
GROUP BY User
UNION 
SELECT Users.full_name, sum( total ) AS Productive
FROM time_report, users
WHERE time_report.User = users.user_id
AND date
BETWEEN '2011-0502'
AND '2011-05-11'
AND Service <49
GROUP BY User 

это дает все результаты в одномстрока

full_name sum(total) 
Cian Higgins 26 
Wallace Ward 23 
jason ward 42 
Thomas Woods 72
 Peter Jones 49
 fintan corrigan 40 
David Jones 35 
January Jones 23 
Joe Johnson 24 
Cian Higgins 14 
jason ward 33 
Thomas Woods 53
 Peter Jones 41 
fintan corrigan 32 
David Jones 27 

1 Ответ

0 голосов
/ 20 мая 2011

Вы можете использовать оператор CASE для уточнения суммы и получить обе суммы с одним оператором.

SELECT  Users.full_name
        ,sum(total)
        ,sum(case when service < 49 then total else 0 end) AS Productive
FROM    time_report
        , users
WHERE   time_report.User = users.user_id
        AND date BETWEEN '2011-0502' AND '2011-05-11'
GROUP BY 
        User
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...