1

これは、多くの結合がある実際の複雑なクエリの簡略化されたバージョンです。

SELECT 
    (SELECT AVG(height) FROM users u2 WHERE u2.id IN u1.id)
FROM users u1
WHERE created > '2013-01-01'
GROUP BY state

サブクエリは u1.id が集計値なので動かない部分です。私が実際にやりたいことは、すべての集計値をリストとしてクエリすることです。私はこのようにすることができます:

(SELECT AVG(height) FROM users u2 WHERE FIND_IN_SET(u2.id,GROUP_CONCAT(DISTINCT u1.id)))) 

しかし、文字列の解析は非効率的で、インデックスを使用できず、MySQL の group_concat_max_len のデフォルト値である 1024 に違反します。

もう 1 つの解決策は、内側のクエリを外側のクエリのミラーに変換することですが、これは非常に遅くなります。残念ながら、クエリはユーザーが選択した多くのフィルタリング オプションに基づいてプログラムで作成されるため、このクエリ構造から大きく逸脱することはできません。

編集:別の形式は、AVG(DISTINCT u1.id, height) のようなことを行うことです。ここでは、個別の user.id を持つ行の平均高さを取りますが、それもサポートされていません。

4

0 に答える 0