2014-03-27 33 views
0

我有以下查詢返回一個特定的主題已經有了約會的數量:Mysql使用相同的列多次使用不同的參數構建查詢。使用子查詢?

select s.last_name, count(c.length) 
from data.appointments a, data.subjects s, data.clinics c, research.sublog t 
where s.id = a.subject_id and c.id = a.clinic_id and 
     s.ssn = t.ssn and a.status = '1' and 
     a.appt_date between '2012-10-01' and '2013-09-30' and a.appt_time not like '%01' 
group by t.id 

我想,這對於在同一個查詢多個時間段數(添加不同年份或季度)。我相信我需要使用子查詢來解決這個問題,但是我無法解釋在每個子查詢中放置哪些條件以及哪些需要保留在子查詢之外(我在這方面沒有多少經驗)。這是正確的還是有不同的方法可以更好地用來返回這樣的結果?預先感謝您提供的任何幫助!

回答

1

首先,你要正確的連接語法。其次,你的問題的解決方案是條件聚合函數。這裏有一個例子:

select s.last_name, 
     sum(a.appt_date between '2012-10-01' and '2013-09-30') as cnt_2012, 
     sum(a.appt_date between '2013-10-01' and '2014-09-30') as cnt_2013 
from data.appointments a join 
    data.subjects s 
    on s.id = a.subject_id join 
    data.clinics c 
    on c.id = a.clinic_id join 
    research.sublog t 
    on s.ssn = t.ssn 
where a.status = '1' and 
     a.appt_time not like '%01' 
group by t.id; 

我並沒有做出改變,但你可能應該有group by s.last_name,因爲你有select子句中last_name。而且,appt_time上的過濾器對我來說沒有意義。您不應在日期/時間字段使用like

+0

謝謝!會給這個鏡頭。爲了澄清,appt_time上的過濾器是由於在兩個部門之間共同處理的約定的某種分類(總是在XX:01安排的),所以我們希望排除這些以避免重複計算。 – Joseph

+0

工作得很好。再次感謝! – Joseph