MySql子查询:平均差异,按列分组

MySql子查询:平均差异,按列分组,mysql,sql,group-by,subquery,Mysql,Sql,Group By,Subquery,我有一个mysql表,上面有访问者id、国家、访问时间 我想得到每个国家的平均访问时间 为了获得持续时间,我获取每个访问者id的最早访问时间和最晚访问时间之间的差值 这就是所有访问的平均持续时间: SELECT AVG(duration) FROM ( SELECT TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60 as duration FROM tracker

我有一个mysql表,上面有访问者id、国家、访问时间

我想得到每个国家的平均访问时间

为了获得持续时间,我获取每个访问者id的最早访问时间和最晚访问时间之间的差值

这就是所有访问的平均持续时间:

    SELECT AVG(duration)
    FROM 
    (
    SELECT TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60 
as duration 
    FROM tracker 
    GROUP BY visitor_id
    ) as tracker
这很有效。但按国家分组,我失败了。以下是我最近一次尝试按国家获取平均持续时间:

SELECT country, AVG(duration)
FROM 
(
SELECT TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60 
as duration 
FROM tracker 
GROUP BY visitor_id
) as tracker
GROUP BY country
我得到的错误是:“字段列表”中的未知列“国家”

我想这应该很简单,但我是个笨蛋。我搜索了很多,尝试了很多想法,但都不好。有什么帮助吗


提前感谢。

您需要在子查询中指定要在外部查询中显示的列 试试这个:

SELECT country, AVG(duration)
FROM 
(
SELECT TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60 
as duration, country 
FROM tracker 
GROUP BY visitor_id
) as tracker
GROUP BY country
您也可以尝试:

SELECT 
country, 
AVG(TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60) as avgTime
FROM 
GROUP BY visitor_id,country

您应该将国家/地区和字段列表添加到内部分组中

SELECT country, AVG(duration)
FROM 
(
SELECT TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60 
as duration,country,visitor_id 
FROM tracker 
GROUP BY visitor_id,country
) as tracker
GROUP BY country

您必须在子查询中选择country列,然后必须从派生表中引用country字段
tracker.country

SELECT tracker.country, AVG(tracker.duration)
FROM 
(
SELECT TIMESTAMPDIFF(SECOND, MIN(time_of_visit), MAX(time_of_visit))/60     
as duration ,country
FROM tracker 
GROUP BY visitor_id
) as tracker
GROUP BY tracker.country
编辑

使用子选择
visitor\u id
中的
groupby
将为您提供记录 使用国家/地区的重复数据,以及同时使用
GROUP BY
visitor\u id,country
将对同一区域内国家的数据进行分组 访客id,仅当一名访客属于多个访客时才可能 如果一名游客只属于一个国家,则超过一个国家 i、 e一对一的关系,然后只需使用
groupbyvisitor\u id


谢谢,它起作用了。在本解决方案中,最好按访客id分组,在内部组中按国家/地区分组,或者在其他解决方案中选择持续时间、内部国家/地区和仅按访客id分组?它们都有效,我只是不知道哪个更好或者为什么。。。谢谢,谢谢。第一个代码有效。第二个返回错误“无效使用组函数”。您的解决方案非常有效,谢谢。内部组是否应同时具有访客id、国家/地区。。。或者只是访客身份证?一个解决方案有两个,一个解决方案只有访客id。它们都能工作,但我真的不知道这是否有区别,使用哪一个更好或者为什么?感谢您的更改和解释。