2016-06-13 71 views
1

所以我woud喜欢找的部门名称或部门ID(dpmid)。对于年龄的其他组中最大平均集团,这是我的查询:如何在子查询中获取max()组的值?

select 
MAX(avg_age) as 'Max average age' FROM (
    SELECT 
     AVG(userage) AS avg_age FROM user_data GROUP BY 
     (select dpmid from department_branch where 
      (select dpmbid from user_department_branch where 
       user_data.userid = user_department_branch.userid)=department_branch.dpmbid) 
) AS query1 

此代码只显示最大平均年龄的值,当我尝试显示组的名称时,它将显示错误的组名称。

那么,如何显示从另一个表中查询子查询的最大组名?

+0

你可以发布你的表defintions,在每一样本数据表和预期的结果? –

回答

0

你可以试试这个..

select MAX(avg_age) as max_avg, SUBSTRING_INDEX(MAX(avg_age_dep),'##',-1) as max_age_dep from 
(
    SELECT 
    AVG(userage) as avg_age, CONCAT(AVG(userage), CONCAT('##' ,department_name)) as avg_age_dep 
    FROM user_data 
    inner join user_department_branch 
      on user_data.userid = user_department_branch.userid 
    inner join department_branch 
      on department_branch.dpmbid = user_department_branch.dpmbid 
    inner join department 
      on department.dpmid = department_branch.dpmid 
    group by department_branch.dpmid 
) tab_avg_age_by_dep 
; 

我已经做了ipothesys的部门名称放在一个“部门” anagraphical表中的一些变化。所以,它需要投入加入表中加,后来我改变您的查询,最终如果部门名称放在(但我没有事情,所以)在branch_department表,你可以在现场和治疗添加到您的查询

更新

在辅助的说,如果你wanto避免相同的平均情况下,您可以furtherly做单义以这种方式追加ROWNUM ID的平均值:

select MAX(avg_age) as max_avg, SUBSTRING_INDEX(MAX(avg_age_dep),'##',-1) as max_age_dep from 
(
    SELECT 
    AVG(userage) as avg_age, CONCAT(AVG(userage), CONCAT('##', CONCAT(@rownum:[email protected]+1, CONCAT('##' ,department_name)))) as avg_age_dep 
    FROM user_data 
    inner join user_department_branch 
      on user_data.userid = user_department_branch.userid 
    inner join department_branch 
      on department_branch.dpmbid = user_department_branch.dpmbid 
    inner join department 
      on department.dpmid = department_branch.dpmid 
    ,(SELECT @rownum:=0) r 
    group by department_branch.dpmid 
) tab_avg_age_by_dep 
; 
+1

非常感谢你!,这对我来说是工作的 –

+0

看起来很复杂。我的解决方案不适合你? @PuttapornJunlong – Tom

+0

你可以在你的sql中添加“concat”部分,就像你在我的sql语句中看到的一样,并且在内部连接部门表和“select @rownum”表中,但是我建议你使用最后发布的sql语句。 最后一个版本包含进一步的改进,以避免相同的平均值产生错误部门名称的更多行。对于这个最后的解决方案,您将拥有更多行,每个行都有正确的部门名称关联。 –

0

我拍了一下我认为你在找的东西。以下内容将为您提供平均年龄最高的部门分支机构。我假定department_branch表有一个department_name字段。您可能需要额外加入才能获得该部门。

SELECT db.department_name, udb.dpmid, AVG(userage) as `Average age` 

FROM user_data as ud 

     JOIN user_department_branch as udb 
     ON udb.userid = ud.userid 

     JOIN department_branch as db 
     ON db.dpmbid = udb.dpmbid 

GROUP BY udb.dpmid 

ORDER BY `Average age` DESC 

LIMIT 1 
+0

谢谢你的汤姆!我会尝试使用和改进这个解决方案。 –