2012-05-01 5 views
3

문제
데이터를 수집하는 게임 서버가 4 대 있습니다. 데이터를 단일 테이블에 저장. 불행하게도 이것은 한 플레이어에 대해 stat 당 네 개의 항목을 만듭니다.SQL 쿼리 : 하나의 문장에서 DISTINCT/UNIQUE 및 SUM() 사용

내가 원하는 것
특정 열에는 하나의 레코드와 SUM()이 필요합니다.

필자가 작성한 진술을 게시 하겠지만 효과가없는 문장을 게시 하겠지만, 내가 성취하고자하는 점을 알게 될 것입니다. 대신 별개를 사용

SELECT DISTINCT(Name), 
       Max(Level), 
       Class, 
       Sum(Kills), 
       Sum(Deaths), 
       Sum(Points), 
       Sum(TotalTime), 
       Sum(TotalVisits), 
       CharacterID 
FROM Characters 
WHERE Name LIKE '$value%' 
     OR CharacterID LIKE '$value' 
ORDER BY Name ASC; 
+2

중복 행은 종종 시스템 아키텍처에 문제가 있음을 나타내는 기호입니다. 병렬 서버를 어떻게 처리하는지 다시 생각해 볼 수 있습니다. –

답변

5

데이터베이스의 중복 행이 실제로 이상적이지 않다고 말하는 것으로 시작하겠습니다. fully normalized 데이터베이스를 사용하면 임의의 예외가 발생하지 않고도 데이터를 훨씬 쉽게 조작 할 수 있습니다.

그러나, 귀하의 질문에 대답하기 위해,이 (group by를 사용하여) 코드를 넣어 말 dweiss 단순히 : 나는 이름을 믿고있어

SELECT 
    name, 
    MAX(Level), 
    Class, 
    SUM(Kills), 
    SUM(Deaths), 
    SUM(Points), 
    SUM(TotalTime), 
    SUM(TotalVisits), 
    CharacterID 
FROM 
    Characters 
WHERE 
    Name LIKE '$value%' OR CharacterID LIKE '$value' 
GROUP BY 
    name, 
    class, 
    characterid 
ORDER BY 
    Name ASC 
; 

, 클래스, characterID, 각 선수에 대한 모든 동일합니다, 그것이 그 안에 그 값들을 얻는 유일한 방법이기 때문입니다. 그렇지 않으면 집계 함수를 사용해야합니다.

+2

감사합니다. 나는 StackedOverflow에서 스타일에 대해 멍청하다고 생각합니다. OP - Tim은 정규화 된 db가 훨씬 더 쉽고 거의 항상 최적화 된 것임을 분명히 말하면서 여기서 확실히 맞습니다. 당분간, Tim이 작성한 쿼리는 결함없이 작동해야하지만, SQL에 대해 좀 더 읽고 스키마를 그리는 데 시간을 할애 할 수 있습니다. 항상 도움이됩니다. – dweiss

+0

쿼리는 위대한 사람들에게 감사 드리며 수업에 감사드립니다. 필자가 직면 한 문제는 phpmyadmin에서 쿼리가 작동하지만 웹 페이지에서 처음으로 문제가 발생했다는 것입니다. – Andrew

+0

@Andrew 확실하지 않습니다. 아마도 새로운 StackOverflow 질문을 열고 문제를 충분히 설명했다면 가장 좋을 것입니다. –

5

, 당신은 할 수 이외의 집계 필드를 기준으로 그룹 (예 : 이름, 클래스, characterid). 이렇게하면 합계를 사용할 수 있습니다 : 최대, 합계, 그리고 당신은 여전히 ​​고유 한 문자가있을 것입니다!

+0

나는 당신을 투표 하겠지만 나는 15 명의 담당자가 필요하다 : 감사합니다! – Andrew

+0

고마워! Tim이 위에 쓴 쿼리를 사용하십시오. 그러나 그의 의견과 의견을 고려하십시오. – dweiss

+0

@ user1366982 또한 dweiss의 답이 가장 도움이된다고 생각되면 녹색 체크 표시를 클릭하여 대답을 줄 수 있습니다. –