0

カウントの値をサブクエリの値で割り、100 を掛けてパーセントを取得しようとしています。以下のコードは機能します...

SELECT data, rota as rt, COUNT(cliente_id) / 
(
 SELECT COUNT(DISTINCT cliente_id)
 FROM vw_grafico
 WHERE rota = rt  
) * 100 ) AS porcentagem

FROM vw_grafico
WHERE WEEKDAY(data)+1  = rota 
AND YEAR(data) = 2013
GROUP BY month(data)
ORDER BY data ASC

...しかし、それに加えて、月ごとのこの値の平均が必要であり、それが私の問題です...これを実行しようとすると、「グループ関数の無効な使用」というエラーが表示されます。

SELECT data, rota as rt, AVG(COUNT(cliente_id) / 
(
 SELECT COUNT(DISTINCT cliente_id)
 FROM vw_grafico
 WHERE rota = rt  
) * 100 ) AS porcentagem

FROM vw_grafico
WHERE WEEKDAY(data)+1 = rota 
AND YEAR(data) = 2013
GROUP BY month(data)
ORDER BY data ASC

このエラーを解決するにはどうすればよいですか?

4

1 に答える 1

0
Select list fields( not aggregates) must be Subset of Group by List that in your query this is not true and your error is for that.

あなたのクエリで:

SELECT data, rota as rt, AVG(COUNT(cliente_id) / 
(
 SELECT COUNT(DISTINCT cliente_id)
 FROM vw_grafico
 WHERE rota = rt  
) * 100 ) AS porcentagem

FROM vw_grafico
WHERE WEEKDAY(data)+1 = rota 
AND YEAR(data) = 2013
GROUP BY month(data)
ORDER BY data ASC

選択リストは次のとおりです。

data, rota as rt

グループリストは次のとおりです。

month(data)

その選択リスト フィールドは、グループ リストのサブセットではありません。たとえば、すべての選択リスト フィールドはグループ リスト内にある必要があります。

SELECT month(data), rota as rt, AVG(COUNT(cliente_id) / 
(
 SELECT COUNT(DISTINCT cliente_id)
 FROM vw_grafico
 WHERE rota = rt  
) * 100 ) AS porcentagem

FROM vw_grafico
WHERE WEEKDAY(data)+1 = rota 
AND YEAR(data) = 2013
GROUP BY month(data), rota
ORDER BY data ASC
于 2013-05-03T18:52:33.993 に答える