mysql:奇怪的错误1111组使用无效
问题描述:
以下是我正在尝试运行的查询。mysql:奇怪的错误1111组使用无效
select location_data.trip_code,sum(max(device_time)-min(device_time)) from location_data,trip_management
where location_data.source_id=3 and location_data.trip_code=trip_management.trip_code
group by location_data.trip_code
存在由在两个trip_managemnet和location_data tables.these跳闸trip_code识别各种旅行采取由单个唯一标识用户(SOURCE_ID = 3)3。我在这里要做的是总结每次旅行的所有时间差异,然后使用sec_to_time函数将其转换为hh:mm:ss,以显示用户3完成所有行程所需的总时间。
上述查询的问题是,只要我在每次旅行的最大和最小device_time的差异上应用sum(),它就会生成错误1111。我不能提供一个子查询,因为这本身就是一个较大查询中的子查询。
我希望我解释得很好。
答
这里的问题是,您试图对总计MAX(),MIN()
应用合计SUM()
,但事实上这两个级别在不同的组上运行。内部的一个分组在location_data.trip_code
之上,外部的一个分组覆盖那个结果。你需要将其包装在一个子查询:
SELECT
trip_code,
/* Outer query sums the inner aggregates */
SUM(max_time - min_time) AS time_sum
FROM (
SELECT
location_data.trip_code,
/* Inner aggregates return the max & min times only */
max(device_time) AS max_time,
min(device_time) AS min_time
FROM
location_data,
INNER JOIN trip_management ON location_data.trip_code = trip_management.trip_code
WHERE
location_data.source_id=3
GROUP BY location_data.trip_code
) first_group
GROUP BY trip_code
我也换成你加入隐与显式INNER JOIN
,这是首选的语法时下。
非常感谢:)但我希望避免子查询来实现结果。正如我所提到的,这个查询initself是一个更大查询中的子查询。嵌套子查询会导致性能下降,不是吗?有没有一种方法可以避免子查询保持架构,因为它是? – Salik 2013-05-01 14:48:21
@ user1451836在这种情况下,FROM子查询无法避免,因为“GROUP BY”子句需要在不同的上下文中应用。这里的性能不会像在SUM()里面的子查询那样差。这可能会慢几个数量级。你的其他选择是将子查询缓存为物化视图,如果它不经常改变的话。 – 2013-05-01 15:27:59
视图不会工作,因为传入的数据是实时的,创建视图会增加系统的复杂性。所以,我认为这是我的问题的答案。谢谢迈克尔:) – Salik 2013-05-01 15:50:39