题
有一个表的用户,有一个领域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;
不隶属于 StackOverflow