繁体   English   中英

如何在子查询中获取max()组的值?

[英]How to get the value of max() group when in subquery?

所以我想找到另一组中具有最大平均年龄的组的部门名称或部门ID(dpmid),这是我的查询:

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

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

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

我拍了一下我认为你在寻找的东西。 以下将为您提供平均年龄最高的部门分支。 我假设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

你可以尝试这个..

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进行了一些更改,部门名称放在一个“部门”字体表中..所以,因为它需要加入一个表加上,然后我改变了你的查询,最终如果放置了部门名称(但我不这么说)在branch_department表中,您可以将字段及其处理添加到查询中

更新

如上所述,如果你想避免相同的平均情况,你可以通过以这种方式附加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:=@rownum+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
;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM