【发布时间】:2011-11-06 05:04:15
【问题描述】:
所以我试图计算零件的数量、任务的数量、每项工作的数量以及制造每项工作所花费的时间,但我得到了一些奇怪的结果。如果我运行这个:
SELECT
j.id,
mf.special_instructions,
count(distinct p.id) as number_of_different_parts,
count(distinct t.id) as number_of_tasks,
SUM(distinct j.quantity) as number_of_assemblies,
SUM(l.time_elapsed) as time_elapsed
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
我现在得到了准确的零件和任务编号,但 time_elapsed 总和不正确。问题可能是什么?
当我用distinct 尝试它时,我得到一个非常低的数字(当我在寻找接近 10,000 的东西时,就像 1 到 30 之间的数字。)
更新:这里是创建代码:
关系是这样的:
- mf_job 信息已链接到作业
- 工作有部分
- 零件有任务
- 任务分批进行
- batch_log 是一个包含批次任务的所有开始和停止的表,它有一个 start_time 和一个 stop_time 以及一个 time_elapsed。
我正在尝试从每个 mf_job 的 batch_log 中获取所有 time_elapsed,其中一个字段中带有单词 backblaze,以及零件、任务和组件的数量。这一切都需要按 job.id 或 mf_job.id 分组
【问题讨论】:
-
@Icarus,非常接近,
select SEC_TO_TIME(SUM(TIME_TO_SEC(elapsed_time)))实际上是正确的,函数SECOND()最多只能给出 59 秒的结果。 -
请包含表架构。并阐明 elapsed_time 是基于 batch_id 或 batch_id + job_id 的 SUM
-
@dah 你能给出来自 show create table 的列 ddl 吗?
-
这里相关的是了解表之间关系的行为。基本上,什么连接会导致重复。然后,您可能需要具有嵌套子查询的不同级别的聚合。您对表格及其关系的描述越多越好。
-
+1 将您的几乎所有代表都用于赏金。
标签: mysql sql group-by sum aggregate