2014-05-15 122 views
-1

我有以下表格:如何從統計結果中的SQL計算平均

訪問: VID, PID, 日期

患者: PID, PNAME, 年齡, 性別

所以我想知道每個病人的平均訪問量。 我試圖很難解決它,但仍然無法完成! 希望有人能幫助我。

+1

你試過到目前爲止什麼SQL的平均數? –

+1

平均每個(日,周,月,年...)是什麼? – peterm

+0

sql server 2008!每月平均每月 – appleduardo

回答

0

您可以通過計算總訪問次數除以患者總數來完成此操作。

select (select count(*) from visits)/(select 1.0*count(*) from patients) as AvgVisitsPerPatient 

注意以下幾點:

  • 1.0*是需要改變的計數爲十進制。 SQL Server對整數進行整數除法。
  • 使用patients表。一些患者可能沒有任何訪問,並且包括在內。
  • select中使用嵌套子查詢。這是允許的。

編輯:

您沒有足夠的信息來計算平均值爲給定的時間單位。雖然你有訪問的日期,但你沒有病人的日期,所以你不知道在任何時間點人口是誰。

+0

這太棒了!並感謝您的評論,併發布解決方案!但我如何使用AVG功能?可以說一個病人有3次訪問,所以我想知道平均值... – appleduardo

+0

@appleduardo。 。 。你需要一個子查詢,這不是回答這個問題的最好方法。有點時髦。你想要一個平均值。 SQL有'AVG()'。然而,最好的方法是將計算結果除以計數。 –

+0

爲什麼子查詢不是最好的方法? 我只是即時通訊開始使用數據庫,並且我會說他們不需要用AVG()來計算,但是我的老師希望我這樣做:/ so ... – appleduardo

1

每位患者的平均訪問次數是不可能的。任何單個病人的總訪問次數只有一個標量值。你無法平均。您可以對所有患者的訪問次數或每位患者的每月訪問次數進行平均,但當只有一組數值時,您無法平均一組數值。 (或在技術上準確,您可以平均一個值,但平均值與該值相同,因爲計數爲1)。

所有患者的平均訪視次數= 訪問總次數/患者人數

Select Avg(Count(*)) 
From Visits 
Group By pid 

每月訪問每個病人

Select p.pid, p.pname, 
    Avg(z.monthVisits) AvgMonthlyVisits 
From (Select Pid, Count(*) monthVisits 
     From table 
     Group By Pid, Month(date)) z 
    join Patient p 
     on p.pid = z.pid 
Group By p.pid