これは比較的高度な質問だと思うので、うまく質問できないかもしれません。せせらぎについては事前にお詫び申し上げます。
Mysql のグループ化機能が大好きです。MIN()、MAX() などを使用すると、特定の共通要素によって行を簡単にグループ化し、グループ化された行の各プールの顕著な特徴を取得できます。しかし、私が尋ねている質問は、この動作が発生することを望まない場合に関連しています。むしろ、特定の状況では、一連の行 (10 としましょう) を 1 つの行にグループ化するときに、行ごとに異なる値について、グループ化された結果の行に表示されるすべての値が派生したものであることを確認したいと考えています。事前にグループ化された同じ行。私の質問: これは可能ですか? 気をつけるべき穴はありますか?
このクエリの構造を少し紹介します。コアには、「親」テーブル (ここでは t1) が「子」テーブル (ここでは t2) に結合されています。クエリの結果は、グループ化または並べ替えの前に、同じ t1 レコードが複数回リストされ、異なる t2 レコードと値に関連付けられている場合があります。各 t1 レコードが 1 回だけ表示され、各行に表示される t2 値が (その t1 レコードに関連付けられたすべての t2 レコードの中で) 優先度が最も高い t2 レコードを反映するように、最終出力をグループ化する必要があります。例として、以下の簡単なクエリを参照してください。
私の実験に基づいて、ネストされたクエリでこれを実行できるように思われます。最初に ORDER し、次に GROUP します。GROUP 操作は、遭遇した最初の行の値を確実に保持しているようです。つまり、ORDER を実行してから GROUP を実行すると、グループ化された出力に含まれる値を適切に制御できるはずです。
これは、私が計画しているクエリ構造の例です。私の質問:何か足りないものはありますか? これを私にとって悪い計画にするような方法で GROUP が振る舞った経験はありますか? 私が説明していることを達成するためのより簡単な方法を考えてもらえますか?
前もって感謝します!
SELECT * FROM ( 選択する # t1 からの各レコードは、最終出力に 1 回だけ表示される場合があります。 t1.id、t1.field2、t1.field3、t1.field4、 # 複数の t2 レコードがあります (それぞれに異なる値と優先度があります) # 各 t1 レコードに関連付けられています。 t2.id AS t2_id、t2.field5、t2.field6、t2.priority から t1 t1.id = t2.t1_id で t2 に参加 {他のいくつかの結合} WHERE { たくさんの条件 } ORDER BY t2.priority ) t GROUP BY t.priority