2016-06-13 69 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

謝謝你的湯姆!我會嘗試使用和改進這個解決方案。 –