【问题标题】:Aggregate functions with joins使用连接聚合函数
【发布时间】:2011-08-26 20:00:25
【问题描述】:

所以我试图计算零件的数量、任务的数量、每项工作的数量以及制造每项工作所花费的时间,但我得到了一些奇怪的结果。如果我运行这个:

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 行。我加入事物的方式有什么问题吗?

【问题讨论】:

    标签: mysql join count sum aggregate


    【解决方案1】:

    使用count(distinct p.id) 计算不同部分的数量。现在您只是在计算总行数。

    【讨论】:

    • 我试过了,它修复了零件的数量,但它似乎不适用于 SUM
    猜你喜欢
    • 2015-06-18
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2014-09-07
    • 2022-01-15
    • 2020-08-13
    相关资源
    最近更新 更多