2012-10-31 65 views
2

我對複雜的MySQL查詢有點麻煩。我試圖從這個查詢中獲得3列。每個程序的程序名稱,每個程序的站點總數以及醫生總數(用戶總數)。我連接2個表格,procedurestbl_syn_procedure與ROLLUP的MySQL總數(總數)和總和(用戶)

只有一個條件,將得到我的醫師總數(用戶總數),這是procedures.phys_id = '##',但我不知道如何將其納入查詢。

我目前有一個很大的查詢,給我一半的數據,我需要。

SELECT 
    IFNULL(Synoptic, 'Total Count') AS Synoptic, Total 
FROM ( 
SELECT 
    Synoptic, 
    SUM(Data) AS Total 
FROM ( 
     SELECT 
     tbl_syn_procedure.name AS 'Synoptic', 
     COUNT(*) AS Data 
     FROM procedures 
     JOIN tbl_syn_procedure ON 
     procedures.proc_synoptic_id = tbl_syn_procedure.name_id 
     GROUP BY procedures.proc_synoptic_id 
    ) AS stats 
    GROUP BY Synoptic WITH ROLLUP 
) AS stats 

這給了我兩列的表,看起來像這樣:

天氣過程------------------------ - 總

APBI設備插入---------- 1328

MRI引導下穿刺活檢------------- 71

立體定向活檢 - ----------- 10504

總數---------------------- 11903

但你可以看到它缺少醫師總數(總用戶) 。如果有人可以給我一些關於如何將第三列添加到查詢中的建議。

+0

查看兩個表格的相關列及其關係將會很有幫助。你想要每個程序和每個醫生的醫師總數?因爲如果每個程序都與單個醫生相關(我假設),程序的醫生總數將與站點總數相同? – caitriona

+0

在過程表中有一個名爲phys_id的列。每次醫生進入手術時,他們的身份證都會進入該字段。所以我們需要統計所有的程序,並且還要統計程序中的程序.phys_id ='##'(登錄的醫師ID號)。 對於兩個相關表格的列... tbl_syn_procedure具有ID,姓名,名_ID,排名 程序具有鏈接到tbl_syn_procedure名_ID ......我們連接這些表,以便我們可以顯示一個字段標題proc_synoptic_id天氣過程的名稱。顯示超聲波活組織檢查,而不是活檢 – Snaptea

回答

0

試試這個

select 
count(p.proc_synoptic_id), p.proc_synoptic_id, name, num_phys_procedures 
from 
procedures p 
inner join tbl_syn_procedure on p.proc_synoptic_id = tbl_syn_procedure.name_id 
left join 
(
    select count(proc_synoptic_id) as num_phys_procedures, proc_synoptic_id from procedures 
    where phys_id = ## 
    group by proc_synoptic_id 
) phys_procedures on p.proc_synoptic_id = phys_procedures.proc_synoptic_id 

group by proc_synoptic_id, name; 

它首先獲得程序的總數,然後加入針對有特定的醫生程序的數量派生表phys_procedures