2014-10-17 156 views
0

在我的查詢中,我需要選擇四個值 - 某些日期的平均值,某個日期的平均值,總計數和計數。我的查詢現在只用於平均值和數量。是需要有兩個查詢還是隻能使用一個?MySQL - >按條件選擇平均值和平均值

SELECT AVG(value) as average, 
COUNT(*) as noRates 
FROM `ratings` WHERE mid = 31 

什麼,我希望是像

SELECT AVG(value) as average, 
COUNT(*) as noRates, 
AVG(value WHERE datecolumn = '2014-10-17') as averageToday, 
COUNT(* WHERE datecolumn = '2014-10-17') as noRatesToday 
FROM `ratings` 
WHERE mid = 31 

回答

1

對於您可以使用情況和條件數,您可以直接把你的表達和表現像作爲計數功能有條件的平均

SELECT 
AVG(`value`) AS average, 
COUNT(*) AS noRates, 
AVG(CASE WHEN datecolumn = '2014-10-17' THEN `value` ELSE 0 END) AS averageToday, 
SUM(datecolumn = '2014-10-17') AS noRatesToday 
FROM `ratings` 
WHERE `mid` = 31 
+0

感謝您的回覆,但這不起作用。我使用隨機值創建了30年中,只有今天在datecolumn中,但averageToday和noRatesToday返回零。值必須是相同的像平均和noRates哪些工作正常。 – SilentCry 2014-10-17 14:24:06

+0

'AVG(CASE WHEN datecolumn ='2014-10-17'THEN value ELSE 0 END)'將針對非2014-10-17的任何行計算* all *行的平均值,但value = 0的平均值。嘗試'AVG(CASE WHEN datecolumn ='2014-10-17'THEN END END)',而不會在2014-10-17之外忽略行。 – 2014-10-17 14:31:14

+1

@SilentCry - 同樣,基於你的評論我想知道:你的'datecolumn'列的數據類型是什麼? Khalid的答案可以理解爲假設你有一個'DATE'類型,但是如果你得到的是全零(而不是一個太低的值),那麼可能是DATETIME或TIMESTAMP類型? – 2014-10-17 14:33:58