2015-10-12 2 views
0
SELECT * 
FROM 
( 
    SELECT com_jobcard.job_card_num, 
    sum(worked_qty),employee.emp_name 
    FROM timer_completed 
    INNER JOIN process ON process.id = timer_completed.process_id 
    INNER JOIN com_jobcard ON com_jobcard.id = timer_completed.job_card_id 
    INNER JOIN employee ON employee.id = timer_completed.employee_id 
            AND process.id = '611' 
            AND timer_completed.group_id = '60' 
    AND timer_completed.report_date = DATE_ADD(CURDATE(), INTERVAL -1 DAY) 
    ORDER BY com_jobcard.id DESC 
) AS tmp_table 
GROUP BY com_jobcard.job_card_num 

В этом коде я использую Group by вариант, но мне нужен результат в порядке убывания com_jobcard.id если я использую выше запрос он возвращает:Использование GroupBy и OrderBy на одном запросе

#1054 - Неизвестный column 'com_jobcard.job_card_num' in 'group statement'.

, пожалуйста, помогите мне.

+1

Что вы пытаетесь достичь? Ваш запрос действительно недействителен SQL. Даже если вы можете заставить MySQL принять его, ваш запрос использует функцию (mis), где MySQL разрешает любые столбцы в 'select', которые не находятся в' group by'. Таким образом, столбец, такой как 'emp_name', получает значение * неопределенное *. –

ответ

0

Использование

GROUP BY tmp_table.job_card_num 
0

две вещи: 1) Все рубрики в Суб необходимости запроса будет Называть. Это очистит ошибку # 1054

sum(worked_qty) as 'WorkedTotal' 

2) Сортировать по доступен только в подзапросов, если вы используете «Top Select» положение. Вам нужно будет использовать порядок, по которому у вас есть группа, и наоборот

0

Вам необязательно вложить ваш запрос здесь. Вы можете заказать набор результатов совокупного запроса, поставив ORDER BY после GROUP BY. Кроме того, как отметил Гордон в своем комментарии, вы злоупотребляете нестандартным расширением MySql до GROUP BY. Это сделает вас сумасшедшими, если вы не узнаете об этом. https://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html

Попробуйте рефакторинга запрос, как это:

SELECT com_jobcard.job_card_num, 
     sum(worked_qty), 
     employee.emp_name, 
     com_jobcard.id 
    FROM timer_completed 
    JOIN process ON process.id = timer_completed.process_id 
    JOIN com_jobcard ON com_jobcard.id = timer_completed.job_card_id 
    JOIN employee ON employee.id = timer_completed.employee_id 
       AND process.id = '611' 
       AND timer_completed.group_id = '60' 
       AND timer_completed.report_date = DATE_ADD(CURDATE(), INTERVAL -1 DAY) 
    GROUP BY com_jobcard.job_card_num, employee.emp_name, com_jobcard.id 
    ORDER BY com_jobcard.id DESC 

Помимо того, что проще, чем ваш предлагаемый запрос, это обрабатывает GROUP BY правильно и дает заказ указанной вами.

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