有一个表的用户,有一个领域invited_by_id显示谁邀请该用户的人的用户ID。需要做一个MySQL查询返回的行与来自用户所有的字段和显示有多少人通过每个用户邀请invites_count场。 是这样的:

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

这一个不工作,所以我需要一个工作之一。

有帮助吗?

解决方案

SELECT  u.*,
        (
        SELECT  COUNT(*)
        FROM    users ui
        WHERE   ui.invited_by_id = u.id
        ) AS cnt
FROM    users u    

其他提示

好吧,首先,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名单,也未在聚合函数列。其他RMDMSes不要让你这样做。

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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top