Агрегатные функции с объединениями - PullRequest
0 голосов
/ 27 августа 2011

Итак, я пытаюсь подсчитать количество деталей, количество заданий, количество в каждом задании и время, затрачиваемое на изготовление каждого задания, но я получаю несколько забавных результатов.Если я запускаю это:

SELECT
  j.id, 
    mf.special_instructions,
  count(p.id) as number_of_parts,
  count(t.id) as number_of_tasks,
  j.quantity as job_quantity

FROM
  sugarcrm2.mf_job mf
INNER JOIN ramses.jobs j on
  mf.id = j.mf_job_id
INNER JOIN ramses.parts p on
  j.id = p.job_id
INNER JOIN ramses.tasks t on
  p.id = t.part_id
INNER JOIN ramses.batch_log l on
  t.batch_id = l.batch_id

WHERE 
  mf.job_description                LIKE "%BACKBLAZE%" OR
  mf.customer_name                  LIKE "%BACKBLAZE%" OR
  mf.customer_ref                   LIKE "%BACKBLAZE%" OR
  mf.technical_company_name LIKE "%BACKBLAZE%" OR
  mf.description                        LIKE "%BACKBLAZE%" OR
  mf.name                                   LIKE "%BACKBLAZE%" OR
  mf.enclosure_style                LIKE "%BACKBLAZE%" OR 
    mf.special_instructions     LIKE "%BACKBLAZE%"
Group by j.id

Тогда я получаю это для одной из записей:

"id";"special_instructions";"number_of_parts";"number_of_tasks";"job_quantity"
"10cfa05c-a8c0-b1e6-2a36-4e52579c82ab";"BACKBLAZE TEMPLATE full assembled/tested RAL 5017 custom Logo - cutout";"105";"105";"1"

То есть должно быть 105 задач и 105 частей, это обычно непривычно как частьимеет от 8 до 10 задач, а также работа, как правило, должна иметь только 10 частей в каждой работе.Когда я запускаю это:

SELECT * from ramses.parts where job_id = "10cfa05c-a8c0-b1e6-2a36-4e52579c82ab"

Возвращаются только 13 строк.Есть ли какая-то проблема с тем, как я присоединяюсь?

1 Ответ

1 голос
/ 27 августа 2011

Используйте count(distinct p.id) для подсчета количества различных частей.Теперь вы просто подсчитываете общее количество строк.

...