2

我有以下 SQL 语句:

SELECT  Office, 
COUNT(Office) As Tot_Part, 
(SELECT Office, COUNT(Office) 
      FROM trespondent 
      WHERE completion_status= 'Started' 
      OR completion_status = 'Complete' 
      GROUP BY Office ORDER BY Office
) As Total_Resp 
FROM trespondent 
WHERE completion_status <> 'New' 
GROUP BY Office 
ORDER BY Office

我遇到的问题是SELECT括号中的陈述——我想要做的是把所有的total人都带回来,然后是total那些已经开始或完成的人。

1241 - 操作数应包含 1 列

如果我包括 COUNT(Office),那么这两列不匹配。

如何改进我的查询以实现我正在寻找的结果集?

Office    Tot   Resp
London    20    2
Leeds     30    17
4

1 回答 1

5

选择列表中的任何子查询都必须是标量子查询,即它必须有一列一行。

但在这种情况下,您根本不需要子查询:

SELECT 
 Office, 
 COUNT(Office) As Tot_Part, 
 SUM(completion_status IN ('Started', 'Complete')) AS Total_Resp
FROM trespondent 
WHERE completion_status <> 'New' 
GROUP BY Office 
ORDER BY Office

诀窍是值为 1 或 0 的 SUM() 与值为 1 的行的 COUNT() 相同。 MySQL 将布尔表达式视为 1 或 0。

于 2013-10-10T19:51:40.507 回答