여기에 세 개의 테이블이 있는데, 난 복잡한 쿼리를 사용하려고합니다.합산 된 SUM 쿼리의 MySQL 쿼리 문제
표 1 (팀) 거기에 팀이 있습니다
id name
------------
150 LA Lakers
151 Boston Celtics
152 NY Knicks
표 2 (점수를) 거기에 점수를 가지고
id teamid week score
---------------------------
1 150 5 75
2 151 5 95
3 152 5 112
표 3 (티켓)
거기에 티켓을 가지고id teamids week
---------------------
1 150,152,154 5
2 151,154,155 5
내가 쓰려고하는 두 가지 쿼리가 있습니다. 이 쿼리를 실행할 때마다 이들을 합산하려고하는 것이 아니라 ickets, weekly_score 필드를 티켓에 추가했습니다. 팀에 새로운 점수가 입력 될 때마다 팀 ID를 가져 와서 해당 팀/주 콤보가있는 모든 티켓을 가져 와서 팀 점수 합계에 따라 업데이트 할 수 있습니다.
나는 내가 찾고 결과를 얻을 수있는 다음을 시도했다 (I 시도하고 그들을 업데이트하기 전에) :
SELECT t.id, t.teamids, (
SELECT SUM(s1.score)
FROM scores s1
WHERE s1.teamid
IN (
t.teamids
)
AND s1.week =11
) AS score
FROM tickets t
WHERE t.week =11
AND (t.teamids LIKE "150,%" OR t.teamids LIKE "%,150")
뿐만 아니라 쿼리 느리지 만, 또한 반환하지 보인다 점수의 합계, 그것은 단지 목록의 첫 번째 점수를 반환합니다.
도움을 주시면 대단히 감사하겠습니다.
'(t.teamids)'를'IN()'절로 대체 할 수 없습니다. MySQL은이를 IN() 절에서 하나의 문자열로 간주한다. IN ('150,152,154') 대신에 3 개의 값이있다. –
여기서 가장 좋은 해결책은'tickets' 테이블을 적절하게 정규화하여'teamid' 당 하나의 행을 포함하는 것입니다. –
티켓 테이블을 팀과 주당 하나의 레코드로 정규화해야합니다. – Wolf