2013-09-20 3 views
5

Прежде всего, это SQL Fiddle Demo.Получите сумму сгруппированных баллов

теперь вы можете увидеть в скрипке у меня есть две таблицы с именем project и working и теперь я сгруппировал проект, группируется вместе с наличием такого же именем, за исключением второй таблицы имеет _QA суффикса.

Это означает, что я успешно выполнил запрос, который позволяет мне сгруппировать этот проект, но теперь мне также нужны запланированные часы SUM для этого двух проектов.

Если вы видите в скрипку его приход 1000, но это должно быть 2500 означает сумму результат как project и project_QA

Спасибо.

+4

Мне не нравится работать, присоединяться или группироваться по подстрокам. Можете ли вы реорганизовать свою базу данных, используя правильные отношения между сущностями? –

+0

[Извлечение '_QA' из схемы базы данных] (http://sqlfiddle.com/#!2/fc171/4) не дает' 2500'. – hims056

+4

Вы ** ДОЛЖНЫ ** включать коды в свой вопрос, а также. Не полагайтесь на внешние источники. – hjpotter92

ответ

3

Моя попытка ....:

SELECT p.name, 
    (SELECT SUM(p1.planned_hour) 
    FROM project p1 
    WHERE REPLACE(p1.name,'_QA','') = REPLACE(p.name,'_QA','')) AS ProjectPlannedHour, 
    SUM(ROUND(TIME_TO_SEC(TIMEDIFF(vv.end_date, vv.start_date))/3600 ,2)) AS TotalHour 
FROM project p 
INNER JOIN working vv ON vv.project_id = p.id 
GROUP BY REPLACE(p.name,'_QA','') 
ORDER BY TotalHour DESC 
LIMIT 0,5 

С Регистрация:

SELECT p.name, 
     p1.planned_hour AS ProjectPlannedHour, 
     SUM(ROUND(TIME_TO_SEC(TIMEDIFF(vv.end_date, vv.start_date))/3600 ,2)) AS TotalHour 
FROM project p 
INNER JOIN working vv ON vv.project_id = p.id 
INNER JOIN (SELECT REPLACE(name,'_QA','') AS `name`, 
        SUM(planned_hour) AS planned_hour 
        FROM project 
        GROUP BY REPLACE(name,'_QA','')) p1 
     ON REPLACE(p1.name,'_QA','') = REPLACE(p.name,'_QA','') 
GROUP BY REPLACE(p.name,'_QA','') 
ORDER BY TotalHour DESC LIMIT 0, 5 

Результат:

| NAME | PROJECTPLANNEDHOUR | TOTALHOUR | 
|---------|--------------------|-----------| 
| project |    2500 |  4.67 | 

Может кто-нибудь дать лучшее решение, я пока не могу figurout более простой запрос ...

+0

отлично ... лучше, если добавить какое-то объяснение ... –

0

Попробуйте ano ther solution -

SELECT GROUP_CONCAT(NAME) name, SUM(planned_hour) planned_hour, SUM(TotalHour) TotalHour FROM (
    SELECT 
    p.name, 
    p.planned_hour, 
    SUM(TIMESTAMPDIFF(SECOND, vv.start_date, vv.end_date))/3600 TotalHour 
    FROM 
    project p 
    INNER JOIN 
    working vv ON vv.project_id = p.id 
    GROUP BY 
     p.id) t; 

Это немного упрощено. Результат:

project,project_QA 2500 4,6667 
Смежные вопросы