>

이것으로 두 테이블을 선택하고 있습니다 :

SELECT m.torneio, m.deck, m.top, m.lugar, sum( m.quantidade ) AS quantidade, m.formato AS formato, q.quantidade AS qtorneio, t.season AS season, sum( m.top ) AS totaltops, count( m.lugar = '1' ) AS venceu
FROM `metagame` AS m, quantidade AS q, torneios AS t
WHERE m.torneio = t.nome
AND m.torneio = q.nome
GROUP BY m.deck

내 문제는 venceu가 lugar = 1 일 때 인스턴스 대신 모든 인스턴스를 계산한다는 것입니다. 왜 그럴까요?

sum ()도 시도했지만 좋은 결과는 없었습니다. 이 문제를 어떻게 해결할 수 있습니까?

  • 답변 # 1

    count (m.lugar = '1') 구문이 놀랍지 만 count (*)와 동일한 구문을 반환합니다. 아마도 venceu로 sum (lugar = 1 else 0 end 인 경우)로 변경해야합니다. 또한 예상대로 작동하는지 확인하기 위해 그룹을 면밀히 검토해야합니다 (의심하지 않습니다).

  • 답변 # 2

    count(x)  표현을 받아들이지 않습니다.

    몇 번만 x 를 세고 있니  반환됩니다.

    해야 할 일은 m.lugar 인지 확인하는 것입니다.   1 입니다  예, 카운터에 하나를 추가하면 아무것도하지 않습니다.

    인라인 검사는 다음과 같이 수행 할 수 있습니다 :

    case when m.lugar = '1' then 1 else 0 end
    
    

    그러면 얻을 수있는 모든 것을 추가하십시오 :

    sum(case when m.lugar = '1' then 1 else 0 end)
    
    

    최종 검색어는 다음과 같아야합니다 :

    SELECT 
        m.torneio, 
        m.deck, 
        m.top, 
        m.lugar, 
        sum( m.quantidade ) AS quantidade, 
        m.formato AS formato, 
        q.quantidade AS qtorneio, 
        t.season AS season, 
        sum( m.top ) AS totaltops, 
        sum(case when m.lugar = '1' then 1 else 0 end) AS venceu
    FROM 
        `metagame` AS m, 
        quantidade AS q, 
        torneios AS t
    WHERE 
        m.torneio = t.nome
        AND m.torneio = q.nome
    GROUP BY 
        m.deck
    
    

  • 답변 # 3

    질문을 이해하면 다음을 사용할 수 있습니다 :

    sum(case when m.lugar = '1' then 1 else 0 end)
    
    

    또는 having 를 시도해 볼 수 있습니다  조항

    SELECT column_name(s)
    FROM table_name
    WHERE condition
    GROUP BY column_name(s)
    HAVING condition
    ORDER BY column_name(s);
    
    

  • 이전 ios - 신속한 새로 고침 테이블보기
  • 다음 javascript - 상대 위치에서 고정 위치로 요소 위치를 변경하면 내용이 튀는 것을 방지하는 방법