SQL COUNT 문제 해결: 고유한 행 대신 모든 행을 계산하는 이유
이 문서에서는 일반적인 SQL 문제인 COUNT
함수가 개별 개수 대신 총 행 개수를 반환하는 문제를 다룹니다. 문제가 있는 SQL 문을 분석하고 수정 방법을 알려드리겠습니다.
다음 SQL 쿼리는 개별 행 수를 계산하는 것을 목표로 하지만 모든 행 수를 잘못 계산하고 있습니다.
<code class="language-sql">SELECT `ID`, `To`, `Poster`, `Content`, `Time`, ifnull(`Aura`, 0) AS `Aura` FROM ( SELECT * 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) ) final GROUP BY `ID`, `Poster` ORDER BY `Time` DESC LIMIT 10;</code>
문제는 LEFT JOIN
하위 쿼리에 있습니다. 중요한 GROUP BY
절이 빠졌습니다. COUNT(*)
없이 GROUP BY
함수는 messages_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>
이 개정된 LEFT JOIN
은 이제 AuraID
기능을 적용하기 전에 AuraStatus
및 COUNT(*)
별로 결과를 올바르게 그룹화합니다. 이렇게 하면 COUNT
함수가 AuraID
및 AuraStatus
의 고유한 조합에서 작동하여 원하는 개별 행 개수를 생성할 수 있습니다. 그러면 수정된 쿼리가 의도한 대로 고유한 행을 정확하게 계산합니다.
위 내용은 내 SQL COUNT 함수가 고유 행 대신 모든 행을 계산하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!