3

ユーザーとフォローの2つのテーブルがあります。次の表には、status という名前の列があります。各ユーザーがステータス別にグループ化したフォロー数を数えたいと思います。

以下のクエリは、各ユーザーの各ステータス タイプのレコードを返します。

SELECT users.name as user_name, f.status, count(f.id) 
FROM users
JOIN application_follows f ON f.user_id = users.id
GROUP BY users.id, f.status
ORDER BY users.id

次のようなものを返します。

user_name     status     count

mike          new         10
mike          old         5
tom           new         8
tom           old         9

しかし、私は次のようなもっとフレンドリーなものが欲しいです:

user_name     new    old

mike          10      5
tom           8       9

group_concat と count を使用してみましたが、うまくいきませんでした。手がかりはありますか?

4

1 に答える 1

0
SELECT  user_name, 
        MAX(CASE WHEN status = 'new' THEN totalFollowers ELSE NULL END) `NEW`,
        MAX(CASE WHEN status = 'old' THEN totalFollowers ELSE NULL END) `OLD`
FROM
    (
        SELECT  users.name as user_name, 
                f.status, 
                count(f.id) totalFollowers 
        FROM    users
                LEFT JOIN application_follows f 
                    ON f.user_id = users.id
        GROUP BY users.id, f.status
    ) derivedTable
GROUP BY user_name

または多分(これについてはよくわかりません)

SELECT  users.name as user_name, 
        MAX(CASE WHEN f.status = 'new' THEN count(f.id) ELSE NULL END) `NEW`, 
        MAX(CASE WHEN f.status = 'old' THEN count(f.id) ELSE NULL END) `OLD`
FROM    users
        LEFT JOIN application_follows f 
            ON f.user_id = users.id
GROUP BY users.id, f.status

于 2012-12-19T01:18:00.390 に答える