Выберите и манипулируйте данными SQL, DISTINCT и SUM?

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

Цель состоит в том, чтобы мой SQL суммировал имя, общее время работы и продукт Total NG за один конкретный день.

В этом порядке:

1.) Сортировка моих данных на определенную "дату". IE 2016-06-03

2.) Представьте значение DISTINCT для "операторов"

3.) SUM() все время регистрируется в эту "дату" и этим "оператором" в "total_working_time_h"

4.) SUM() все no_of_defects, зарегистрированные на эту "дату" и этим "оператором" под "no_of_defects"

дата, оператор, total_working_time_h, no_of_defects

В настоящее время я получаю нужные данные, используя запрос ниже. Но теперь мне нужно и значение DISTINCT оператора, и сумма информации. Могу ли я использовать подзапросы для этого или это должно быть выполнено циклом? Любые другие советы, где я могу узнать больше о том, как решить эту проблему?

Если я запускаю функцию DISTINCT, я не получаю возможность суммировать свои данные так, как я пытаюсь.

    SELECT date,    operator,   total_working_time_h,   no_of_defects FROM {$table_work_hours} WHERE date = '2016-06-03' "

Пример данных в виде картинки

3 ответа

Решение

Не зная структуры или содержимого таблицы, следующий запрос является только хорошим предположением. Биты, на которые стоит обратить внимание и работать sum() а также GROUP BY, На самом деле синтаксис будет немного отличаться в зависимости от того, какую СУБД вы используете.

SELECT
   date
  ,operator
  ,SUM(total_working_time_h)  AS total_working_time_h
  ,SUM(no_of_defects)         AS no_of_defects
 FROM {$table_work_hours}
 WHERE date = '2016-06-03'
 GROUP BY
   date
  ,operator

(Вынуть WHERE укажите или замените его диапазоном дат, чтобы получить результаты по каждому оператору за дату.)

Я не уверен, почему вы пытаетесь сделать DISTINCT. Вы хотите знать данные, количество часов и т. Д. Для конкретной даты.

сделай это....

Select Date, Operator, 'SumWorkHrs'=sum(total_working_time_h),
  'SumDefects'=sum(no_ofDefects) from {$table_work_hours} 
       Where date='2016-06-03' 

Попробуй это:

SELECT SUM(total_working_time) as total_working_time, 
SUM(no_of_defects) as no_of_defects , 
DISTINCT(operator) AS operator FROM {$table_work_hours} WHERE
date = '2016-06-03'
Другие вопросы по тегам