Mysql SQL计数返回的行太多
我有以下SQL语句:Mysql SQL计数返回的行太多,mysql,sql,join,count,left-join,Mysql,Sql,Join,Count,Left Join,我有以下SQL语句: SELECT O.id, O.name, (SELECT COUNT(U.id) FROM User U WHERE U.organization_id = O.id) AS num_users FROM Organization O 用户表和组织表由名为Organization\u id的东西绑定 当我执行此语句时,会得到以
SELECT
O.id,
O.name,
(SELECT
COUNT(U.id)
FROM
User U
WHERE
U.organization_id = O.id) AS num_users
FROM
Organization O
用户表和组织表由名为Organization\u id的东西绑定
当我执行此语句时,会得到以下错误结果:
id | name | num_users
------------------------
1 | MyOrg | 2
2 | MyOrg | 0
3 | testOrg | 0
谁能告诉我,我如何才能得到一个结果,将只产生1线公关组织
请注意,我尝试了DISTINCT,但没有得到更好的结果,演示了以下查询:
SELECT GROUP_CONCAT(DISTINCT o.id SEPARATOR ', '), O.name,
COUNT(U.organization_id) AS MyCount
FROM Organization O
LEFT JOIN User U ON U.organization_id = O.id
GROUP BY O.name;
或者,如果不需要id字段,则:
SELECT O.name, COUNT(U.organization_id) AS MyCount
FROM Organization O
LEFT JOIN User U ON U.organization_id = O.id
GROUP BY O.name;
演示以下查询:
SELECT GROUP_CONCAT(DISTINCT o.id SEPARATOR ', '), O.name,
COUNT(U.organization_id) AS MyCount
FROM Organization O
LEFT JOIN User U ON U.organization_id = O.id
GROUP BY O.name;
或者,如果不需要id字段,则:
SELECT O.name, COUNT(U.organization_id) AS MyCount
FROM Organization O
LEFT JOIN User U ON U.organization_id = O.id
GROUP BY O.name;
由于唯一的id号,DISTINCT将不起作用。选择DISTINCT O.name,从用户U中选择COUNTU.id,其中U.organization\U id=O.id作为组织O中的num\U用户不起作用either@Marc拉斯穆森:所以你的表叫做Organization,每个组织都有一个ID,但两个组织恰好是一个组织,以防他们的名字匹配?这就是你说的吗???看起来你有不止一个名为“MyOrg”的组织。我觉得结果不错,但你想如何处理这个案子?请显示所需结果。由于id号唯一,DISTINCT将不起作用。请选择DISTINCT O.name,从用户U中选择COUNTU.id,其中U.organization\U id=O.id作为组织O中的num\U用户不工作either@Marc拉斯穆森:所以你的表叫做Organization,每个组织都有一个ID,但两个组织恰好是一个组织,以防他们的名字匹配?这就是你说的吗???看起来你有不止一个名为“MyOrg”的组织。我觉得结果不错,但你想如何处理这个案子?请显示您想要的结果。使用内部联接,您将不会得到任何0个计数。使用左联接和计数*,具有0个用户的组织将人为地向计数中添加1。例如,“MyOrg”将显示3个用户,而它应该是2。@Marcus Adams,我使用联合更新了我的答案,以获得第一个查询中没有的所有o.id。我更喜欢你的第一个答案。提示:只需将COUNT*改为COUNTU.organization\u id.Marcus Adams,哇,谢谢,我不知道我在想什么。我更新了我的答案。今天可能是星期二,但我的大脑似乎像星期一一样工作。我应该已经注意到了。使用内部联接,您不会得到任何0计数。使用左联接和计数*,具有0个用户的组织将人为地向计数中添加1。例如,“MyOrg”将显示3个用户,而它应该是2。@Marcus Adams,我使用联合更新了我的答案,以获得第一个查询中没有的所有o.id。我更喜欢你的第一个答案。提示:只需将COUNT*改为COUNTU.organization\u id.Marcus Adams,哇,谢谢,我不知道我在想什么。我更新了我的答案。今天可能是星期二,但我的大脑似乎像星期一一样工作。我应该注意到这一点。