mysql:奇怪的错误1111无效使用group by

时间:2013-05-01 12:44:55

标签: mysql database mysql-error-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表中的trip_code标识了各种行程。这些行程由单个唯一标识的用户(source_id =)3进行。我在这里尝试做的是总结每次旅行的所有时间差异,然后使用sec_to_time函数将其转换为hh:mm:ss,以显示用户3完成所有旅行所花费的总时间。

上述查询的问题是,一旦我对每次旅行的最大和最小device_time的差异应用sum(),它就会生成错误1111。我无法提供子查询,因为这本身就是更大查询中的子查询。

我希望我能很好地解释这个问题。

1 个答案:

答案 0 :(得分:4)

此处的问题是您尝试对聚合SUM()应用聚合MAX(),MIN(),但实际上这两个级别在不同的组上运行。内部的一组在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替换了隐式连接,这是现在的首选语法。