2016-11-15 8 views
0

私は次のデータベーステーブルを持っている:複数のWHEREが存在する複数のCOLUMNSのSUMのMySQL構文を修正しますか?

+----------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+-------------+------+-----+---------+----------------+ | results_id | int(11) | NO | PRI | NULL | auto_increment | | community_id | int(11) | NO | | NULL | | | player1_id | int(11) | NO | | NULL | | | player1_name | varchar(50) | NO | | NULL | | | player1_team | varchar(50) | NO | | NULL | | | player1_goals | int(11) | NO | | NULL | | | player1_result | varchar(3) | NO | | NULL | | | player2_goals | int(11) | NO | | NULL | | | player2_result | varchar(3) | NO | | NULL | | | player2_id | int(11) | NO | | NULL | | | player2_name | varchar(50) | NO | | NULL | | | player2_team | varchar(50) | NO | | NULL | | | player1_pts | int(11) | NO | | NULL | | | player2_pts | int(11) | NO | | NULL | | | date | date | NO | | NULL | | +----------------+-------------+------+-----+---------+----------------+

私はプレイヤーがに対する最も得点を挙げた人を私に教えてくれますMySQLのクエリを実行したいです。

そのプレーヤーは、player1またはplayer2のいずれかになります。

私はそれがあること、このようなものを想像:

select member, goals, count(*) Total 
from 
(
select player2_name as member, player1_goals as goals 
from results 
WHERE player1_id = 2 
union all 
select player1_name as member, player2_goals as goals 
from results 
WHERE player2_id = 2 

) AS T 

group by goals 
order by Total desc 
Limit 1 

をこれが結果得られます。

member  | goals | Total 
Jamie Charles | 2  | 11 
Jamie Charles | 0  | 8 
Jamie Charles | 3  | 5 
Jamie Charles | 1  | 4 
Jamie Charles | 5  | 1 

をしかし、発生したどのように多くの目標の数の言っているように見えます。正しい結果は(2x11)+(3*5)+(1*4)+(5*1)

このクエリの正しい構文は何ですか?

+0

を必要としない、あなたは '(player2_id = 2の結果からSUM(player2_goals)を選択)+(player1_id = 2の結果からSUM(player1_goals)を選択)'てみましたか? – randominstanceOfLivingThing

+0

ちょうどそれを試して、動作しませんでした – RDowns

+0

あなたは実際にどのようなエラーがありますか? – wmlynarski

答えて

1

メンバーごとにグループ化し、sum集計関数を使用してすべての目標の合計を取得する必要があります。あなたは順番に

select member, sum(goals), count(*) Total_goal_records 
from 
(
select player2_name as member, player1_goals as goals 
from results 
WHERE player1_id = 2 
union all 
select player1_name as member, player2_goals as goals 
from results 
WHERE player2_id = 2 

) AS T 

group by member 
order by Total desc; 
+0

優秀!それはそれをした!ありがとう! – RDowns

関連する問題