2011-09-12 14 views
117

GROUP BY句がGROUP BY 1の文で構成されているSQLクエリを誰かに送ってきました。SQL文節 "GROUP BY 1"は何を意味しますか?

これは誤植である必要がありますか?エイリアス1の列はありません。これはどういう意味ですか?これはタイプミスでなければならないと思いますか?

+2

結果セットの最初の列 – Lamak

+5

この構文は移植性がないことに注意してください。 mysql以外のデータベースでは動作が異なります。たとえば、Oracleでは定数として扱われます。 –

+2

@RussellReedはい。残念ながら(エイリアスを使用すると非常に便利なことがあるため)、ansi sqlでは列の順序でグループ化することはできません。その理由は、グループが投影前に起こることです。しかし、何十行もの式をグループ化すると、最終的なSQL文では数十行の* mutiples *になります。 – javadba

答えて

128

これは、呼び出されたものに関係なく、最初の列でグループ化することを意味します。 ORDER BYと同じことができます。

8

これは上記のクエリGROUP BY 1のSELECT句

32
SELECT account_id, open_emp_id 
     ^^^^  ^^^^ 
      1   2 

FROM account 
GROUP BY 1; 

の最初のフィールドでグループは account_idあるfirst column in select statementを意味するであろう。

ORDER BYで指定することもできます。

17

フィールド名でグループ化するだけでなく、序数またはフィールドでグループ化することもできます。

テーブル/ビュー構造が変更される可能性があるため、特定のものをグループ化する場合は一般的には勧められません。さらに、読みにくい(クレジット:Yuck)。しかし、あなたが何かのユニークなセットを返すなら、それは大丈夫です。

+5

+1は「これをしないでください」と付け加えると、それを避ける最善の理由は読みにくいということです。 – Yuck

1

グループバイ句の後に置く列の位置によってグループ化します。

たとえば、 'SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1' を実行すると、グループはSALESMAN_NAMEになります。

Select *」を実行して何らかの理由で列が異なる順序でテーブルを再作成すると、予想よりも異なる結果が表示される可能性があります。

0

あなたも、もちろん、それは私たちのために便利ですが、あなたはその条件に注意を払う必要があり、このGROUP BY 1,2,3..のように使用することができるほか、あなたのselect句で第一列でSQLグループを意味し、我々は常に、ORDER BY 1と一緒にこのGROUP BY 1を使用一部の列が選択列を変更して可視化されていない場合に結果が得られない可能性があります。