4

テーブル users があり、このユーザーを招待したユーザーのユーザー ID を示すフィールド Invuitate_by_id があります。ユーザーからのすべてのフィールドと、各ユーザーが何人を招待したかを示すinvites_countフィールドを含む行を返すMySQLクエリを作成する必要があります。このようなもの:

SELECT
    User.*, Count.count
FROM
    users AS User,
    (
        SELECT COUNT(*) AS count FROM users WHERE users.invited_by_id=User.id
    ) AS Count;

これは機能していないので、機能するものが必要です。

4

2 に答える 2

6
SELECT  u.*,
        (
        SELECT  COUNT(*)
        FROM    users ui
        WHERE   ui.invited_by_id = u.id
        ) AS cnt
FROM    users u    
于 2010-01-28T16:18:33.737 に答える
4

まず第一にcount、SQL の予約語であるため、テーブル エイリアスとして使用することはできません (何らかの方法で引用しない限り)。次に、この問題を解決する実際の方法はGROUP BY、サブクエリに句を導入することです。

これを試して:

SELECT user3.*, subquery.theCount FROM
    users AS user3
INNER JOIN ( 
    SELECT
        user1.id, count(user2.id) AS theCount
    FROM
        users AS user1
    LEFT OUTER JOIN
        users AS user2 ON user2.invited_by_id=user1.id
    GROUP BY user1.id
) AS subquery ON subquery.id=user3.id;

ここに MySQL に関するちょっとした秘密があります。これを使用すると、GROUP BYステートメントをごまかして、GROUP BYリストにも集計関数にもな​​い列を選択できます。他の RMDMS では、これを行うことはできません。

SELECT
    user1.*, count(user2.id) AS theCount
FROM
    users AS user1
LEFT OUTER JOIN
    users AS user2 ON user2.invited_by_id=user1.id
GROUP BY user1.id;
于 2010-01-28T16:10:00.030 に答える