2016-07-24 86 views
0

我對任何語言都很陌生。在sql中,我試圖使用datediff函數來計算數據的平均值以計算年齡。我知道這些年齡,但我根本不知道如何撰寫這份聲明。在同一語句中使用datediff函數和avg函數

當我運行這個語句時,我得到了我正在尋找的信息。不過,我還需要使用datediff函數來計算DOB的年齡。這是我迷路的地方。這是我所擁有的,當我運行它時,我會遇到一個錯誤。

select firstname,lastname, dob 
    SELECT DATEDIFF(day,'1970-01-01','1978-05-27') AS DiffDate 
    where occupationId = 164 and gender = 'M'; 

再次,我對此有所瞭解,並對此進行了研究並進行了解答和理解。我需要幫助。

+0

你使用MySQL或SQL Server?由於MySQL只有'DATEDIFF'中的兩個參數,即'DATEDIFF('1970-01-01','1978-05-27')',而SQL Server有三個參數,第三個參數是_date interval_, 。 –

+0

我正在使用SQL Pro服務器 – Angie

+0

我的意思是你使用的是什麼數據庫? MySQL服務器,Microsoft SQL Server,Oracle? SQL Pro Server是一個處理數據庫的工具,我相信這不是我所要求的。還建議您在收到的問題中包含錯誤消息。 –

回答

0

你的SQL查詢有幾個問題。

  1. 的MySQL DATEDIFF不具有間隔參數即day。它只需要兩個日期時間參數。在您的研究過程中,您一定會遇到SQL Server文檔。
  2. 改爲使用TIMESTAMPDIFF(這需要區間)像這樣TIMESTAMPDIFF(year, dob, CURDATE()) AS currentage這會使您獲得當前的年齡。
  3. 沒有FROM子句和表被指定,所以你從哪裏得到firstname, lastname, dob, occupationIdgender
  4. 您不需要子選擇查詢來計算年齡。

爲你修改後的查詢(你需要指定您取得您的數據表名):

SELECT firstname, lastname, dob, TIMESTAMPDIFF(year, dob, CURDATE()) AS currentage 
FROM tableName 
WHERE occupationId = 164 and gender = 'M'; 

`

+0

非常感謝你sooooo。我已經調整了代碼到這個SELECT avg(age),TIMESTAMPDIFF(year,dob,CURDATE())作爲currentage FROM users WHERE occupationId = 164和gender ='M';我刪除了名字,姓氏。它現在給我的平均我需要。 – Angie

+0

這就是我想要做的......選擇所有男性,大學/大學教授的平均年齡。使用datediff函數從DOB計算年齡。 – Angie

+0

建議閱讀MySQL的[AVG](http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_avg)函數以獲得所有年齡段的平均值。 –