2016-08-18 2 views
0

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

Таблица: Отчет

----------------------------------------------- 
ID | HumanID | date  | schedule | amount| 
----------------------------------------------- 
1 | 101  | 2016-01-01 | morning | 10 | 
2 | 101  | 2016-01-01 | evening | 8 | 
3 | 102  | 2016-01-01 | morning | 11 | 
4 | 102  | 2016-01-01 | evening | 9 | 
5 | 103  | 2016-01-01 | morning | 8 | 
6 | 103  | 2016-01-01 | evening | 7 | 

я Mysql запросов:

select HumanID, date, 
max(case when schedule = 'morning' then amount end) as morning, 
max(case when schedule = 'evening' then amount end) as evening 
from report 
group by HumanID, date; 

После запроса, результат Придумал как этот

--------------------------------------- 
HumanID | date  | morning | evening | 
--------------------------------------- 
101  | 2016-01-01 | 10 | 8  | 
102  | 2016-01-01 | 11 | 9  | 
103  | 2016-01-01 | 8  | 7  | 

Что я хочу в PHP логики, результат будет будет выглядеть так:

--------------------------------------- 
HumanID | date  | morning | evening | 
--------------------------------------- 
101  | 2016-01-01 | 10 | 8  | 
102  | 2016-01-01 | 11 | 9  | 
103  | 2016-01-01 | 8  | 7  | 
------------------------------------------ 
Total:    | 29 | 24 | 
+1

Пробовали ли вы использовать 'SUM()' в запросе? – Epodax

+0

Какой php вы пробовали? – jedifans

+0

Сумма вместо макс. И РОЛЛУП. Но на самом деле я бы сделал всю форматирующую часть этого в php – Strawberry

ответ

1

Вы можете попробовать добавить этот результат с UNION:

SELECT CAST(t.humanID as char) as humanID,t.date, 
     MAX(....) 
..... -- Rest of your query 
UNION ALL 
SELECT 'total:' as humanID , null , 
     SUM(case when schedule = 'morning' then amount end) , 
     SUM(case when schedule = 'evening' then amount end) 
FROM report 
ORDER BY humanID 
0

т.д .:

select HumanID, date, 
Sum(case when schedule = 'morning' then amount end) as morning, 
Sum(case when schedule = 'evening' then amount end) as evening 
from report 
group by HumanID, date 
With ROLLUP 
Смежные вопросы