2014-10-17 136 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