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の両方を取り戻すことです。totaltotal

1241 - オペランドには 1 列を含める必要があります

を含める COUNT(Office)と、2 つの列が一致しません。

クエリを改善して、探している結果セットを取得するにはどうすればよいですか?

Office    Tot   Resp
London    20    2
Leeds     30    17
4

1 に答える 1

5

select-list 内のすべてのサブクエリは、スカラー サブクエリである必要があります。つまり、1 つの列と 1 つの行が必要です。

ただし、この場合、サブクエリはまったく必要ありません。

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 に答える