mysql - 带连接的聚合函数

标签 mysql join count sum aggregate

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

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 行。我加入事物的方式是否存在某种问题?

最佳答案

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

关于mysql - 带连接的聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7209932/

相关文章:

php - 如何从mysql中的字符串日期中提取日期格式?

postgresql - 如何在 Postgresql 中水平组契约(Contract)一个表上的两个选择查询?

mysql - 选择具有连接表的行数

ios - 字符串的长度作为字符串的扩展

mysql - 在同一个表中使用 JOIN 和 COUNT

php - 在MYSQL中,我想获得具有多个条件的多个SUM来进行总计并获得价格里程碑

php - 我需要将我的 Paypal IPN 脚本与我的用户表结合在一起

php - 通过相同 id 通过其他表中的其他行的值更新表的行

MySQL 在同一列中查找类似项

php - SQL 查询从两个相互关联的表中提取记录 - 表 2 取决于表 1