복붙노트

[SQL] 개별 행을 모든 행을 계산 대신 계산 SQL

SQL

개별 행을 모든 행을 계산 대신 계산 SQL

나는 데이터베이스에서 데이터를 요청하는 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

여기 내 messages_aura 테이블 레이아웃입니다. 그것은 ID, 상태 및 사용자 ID를 보여줍니다.

여기에 위의 진술의 출력이다.

(상기 스크린에서 ID 아래 포스터를 참조하여, 상기 화면의 상태는 다음 ID로 지칭)

성명은 맨 아래 행 1의 오라 수와 상단 행 잘못 무엇 2의 오라 수를 제공해야합니까?

해결법

  1. ==============================

    1.당신은 GROUP BY 대신에 약간의 열을 기준으로 그룹화 그래서 그것의 계수 모든 것을 놓치고있어.

    당신은 GROUP BY 대신에 약간의 열을 기준으로 그룹화 그래서 그것의 계수 모든 것을 놓치고있어.

    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)
    
  2. from https://stackoverflow.com/questions/24562925/sql-counting-all-rows-instead-of-counting-individual-rows by cc-by-sa and MIT license