2011-08-08 57 views
0

我有一个mysql表,它包含这样的数据。mysql查询来计算板球击球手的平均值

Name |how_out |runs 
------------------------------ 
Robin |Not out |45 
Robin |lbw  |25 
Robin |caught  |50 
Robin |caught  |0 
Robin |bowled  |30 
Robin |bowled  |0 
. 
. 
. 

我想要一个SQL查询,它返回以下列

名称,Total_runs,平均

听起来很简单,但对我来说唯一的问题是。 在板球,平均是不SUM(运行)/ COUNT(*) 它的总和(运行)/局的数字的计数,其中how_out不是“不出来”

能有一个人告诉我如何写一个这样的查询?

我写的查询出于明显原因给出了错误的平均值。 我写的查询是

Select `Name`,sum(`runs`) as 'Total_runs', Sum(`runs`)/count(*) 
From `batsman_stats` 
group by `Name` 
order by 2 desc 

请问sql专家请帮帮我吗?

感谢

回答

2
Select `Name`,sum(`runs`) as 'Total_runs', Sum(`runs`)/sum(if(how_out <> 'Not out',1,0)) 
From `batsman_stats` 
group by `Name` 
order by 2 desc 
+0

不错 - 你可以,如果剥离IF(),'how_out <>“没有out''会评估1或0. – wonk0

+0

是的,我知道。我以扩展的形式写了它,使它更容易被忽略。 :) –

+0

是的,这很有道理 – wonk0

1

You could use a CASE statement

SELECT Name, 
     SUM(Runs) as Total_runs, 
     SUM(Runs)/COUNT(CASE WHEN how_out <> 'Not out' THEN 1 END) as Average 
FROM batsman_stats 
GROUP BY Name 
ORDER BY SUM(Runs) DESC 
2

我想你需要一个子查询:

Select Name, sum(runs) as Total_runs, Sum(runs)/(
    select count(*) from batsman_stats b 
    where b.Name=a.Name and not b.how_out = 'Not out' 
) 
From batsman_stats a 
group by Name 
order by 2 desc