2014-05-17 34 views
1

我有以下表格: 訪問:vid,pid,日期 患者:pid,pname,年齡,性別。 我想要的是通過使用計數和最大功能讓患者進行更多訪問。 我沒有與此查詢計數:如何從sql上的count()獲取max()值?

選擇Patient.pname,計數(Visits.pid),如從( 病人內加入訪問 上Patient.pid = Visits.pid) 組由Patient.pname PatientsVisits

所以我的輸出顯示了患者的姓名和每個人的訪問次數。

那麼我怎樣才能得到最大值? ps:即時通訊使用sql server

回答

3

SELECT返回一個表,所以使用嵌套調用來從該表中選擇具有最大值的行。

SELECT DISTINCT pname, COUNT(vid) AS PatientVisits FROM Visits JOIN Patients ON Visits.pid = Patients.pid 
GROUP BY Visits.pid HAVING COUNT(vid) = (
    SELECT MAX(y.x) FROM (SELECT COUNT(vid) AS x FROM Visits GROUP BY pid) AS y 
); 

基本上我們用一個SELECT來獲得分組方式,患者就診的算的話,我們窩那第二個選擇中獲取訪問次數的最大數,那麼我們就窩,第三次SELECT裏面找到病人有這樣的訪問次數。

+0

!但什麼是「計數」?我只是在sql上鍵入這個,我得到和Max(Counts.pid)錯誤說coloumn名稱是無效的。在查詢結束時(「AS Counts」)出現另一個錯誤:沒有列指定到「Counts」的第二列... – appleduardo

+0

「AS計數」部分與「AS PatientVisits」如何重命名列,除了重命名結果表。我測試了其中一個在線SQL測驗中的調用,並將其修改爲在這裏工作,但看起來我在轉換中犯了一個錯誤。 :( – BonzaiThePenguin

+0

也許這將工作?SELECT Counts.pname,MAX(Counts.pid)FROM(SELECT Patient.pname AS pname,COUNT(Visits.pid)AS pid FROM(Patient INNER JOIN Visits ON Patient.pid = Visits.pid )GROUP BY Patient.pname)AS Counts; – BonzaiThePenguin

0

正如我理解你的問題 - 你想要的頂部1例患者最探訪這應該哇,這看起來不錯給你

select top 1 Patient.pname, count (Visits.pid) as PatientsVisits 
from Patient inner join Visits on Patient.pid = Visits.pid 
group by Patient.pname 
order by count(Visits.pid) desc 
+0

yeey謝謝attila,它的作品!但我也想用MAX功能來做,所以我不知道該怎麼做:/ – appleduardo