집 >데이터 베이스 >MySQL 튜토리얼 >내 SQL COUNT(*)가 개별 행 개수 대신 합계를 반환하는 이유는 무엇입니까?
SQL 쿼리는 개별 행 개수가 아닌 총 행 개수를 반환합니다
SQL 쿼리를 실행할 때 잘못된 결과를 방지하려면 COUNT(*)와 같은 집계 함수를 올바르게 사용해야 합니다. 다음 문장을 고려해보세요:
<code class="language-sql">SELECT `ID`, `To`, `Poster`, `Content`, `Time`, ifnull(`Aura`, 0) AS `Aura` FROM ( SELECT DISTINCT * FROM messages m INNER JOIN ( SELECT Friend2 AS Friend FROM friends WHERE Friend1 = '1' UNION ALL SELECT Friend1 AS Friend FROM friends WHERE Friend2 = '1' ) friends ON m.Poster = friends.`Friend` UNION ALL SELECT DISTINCT *, '1' FROM messages WHERE `Poster` = '1' ) var LEFT JOIN ( SELECT `ID` AS `AuraID`, `Status` AS `AuraStatus`, COUNT(*) AS `Aura` FROM messages_aura ) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus) GROUP BY `ID`, `Poster` ORDER BY `Time` DESC LIMIT 10;</code>
이 쿼리의 목표는 messages
및 messages_aura
테이블의 데이터를 쿼리하고 각 사용자에 대한 Aura 메시지 발생 횟수를 계산하는 것입니다. 그러나 문제는 LEFT JOIN
절이 누락된 GROUP BY
하위 쿼리에 있습니다.
문제: GROUP BY
절이 없으면 하위 쿼리는 각 사용자의 수를 계산하는 대신 모든 사용자의 총 Aura 메시지 수를 반환합니다. 결과적으로 관련 열별로 그룹화하는 대신 모든 행을 집계하므로 출력에 잘못된 개수가 표시됩니다.
해결책: 이 문제를 해결하려면 GROUP BY
하위 쿼리에 LEFT JOIN
절을 추가해야 합니다.
<code class="language-sql">LEFT JOIN ( SELECT `ID` AS `AuraID`, `Status` AS `AuraStatus`, COUNT(*) AS `Aura` FROM messages_aura GROUP BY AuraID, AuraStatus ) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus)</code>
GROUP BY AuraID, AuraStatus
을 추가하면 이제 하위 쿼리가 해당 열을 기준으로 결과를 그룹화하여 각 사용자의 아우라 수가 정확하도록 보장합니다.
위 내용은 내 SQL COUNT(*)가 개별 행 개수 대신 합계를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!