0

私はここにこの計算/クエリを持っています:

SELECT  u.username,
        (a.totalCount * 7) +
        (b.totalCount * 3) +
        (c.totalCount * 1) AS totalScore
        FROM users u 
        LEFT JOIN
            (
                SELECT user_id, COUNT(user_id) totalCount
                FROM items 
                GROUP BY user_id
            ) a ON a.user_id= u.user_id
        LEFT JOIN
            (
                SELECT user_id, COUNT(user_id) totalCount
                FROM comments
                GROUP BY user_id
            ) b ON b.user_id= u.user_id
        LEFT JOIN
            (
                SELECT user_id, COUNT(user_id) totalCount
                FROM ratings
                GROUP BY user_id
            ) c ON c.user_id = u.user_id

        ORDER BY totalScore DESC LIMIT 10;

問題は、a、b、またはcのいずれかが0を返す場合、全体totalScoreが0になることです。何が起こっているのか理解できませんか?私は最終的な集計に0を掛けていません。

4

1 に答える 1

4

私はそれがむしろヌルの問題だと思います(あなたの左の結合で、これは簡単に起こるかもしれません)。

NULL + 1 + 2 = NULL

したがって、COALESCE(nullの場合は...)演算子を使用します

それで

SELECT  u.username,
        (COALESCE(a.totalCount, 0) * 7) +
        (COALESCE(b.totalCount, 0) * 3) +
        (COALESCE(c.totalCount, 0) * 1) AS totalScore

と少しSqlFiddle

于 2013-01-28T17:32:20.853 に答える