web-dev-qa-db-ja.com

SQL句「GROUP BY 1」とはどういう意味ですか?

誰かが私にGROUP BY句がステートメントGROUP BY 1からなるSQLクエリを送信しました。

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

168
Spencer

それは何と呼ばれているかに関係なく、最初の列でグループ化することを意味します。 ORDER BYでも同じことができます。

195
Yuck
SELECT account_id, open_emp_id
         ^^^^        ^^^^
          1           2

FROM account
GROUP BY 1;

上記のクエリでは、GROUP BY 1first column in select statementであるaccount_idを指します。

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

注:ORDER BYおよびGROUP BYの番号は、0ではなく常に1で始まります。

61
mr_eclair

フィールド名によるグループ化に加えて、順序、またはテーブル内のフィールドの位置によってグループ化することもできます。 1は(名前に関係なく)最初のフィールドに対応し、2は2番目のフィールドに対応します。

テーブル/ビューの構造が変更される可能性があるため、特定の何かでグループ化する場合、これは一般に不適切です。また、テーブルのフィールドを記憶していないと、SQLクエリが何をしているのかをすばやく理解するのが難しい場合があります。

一意のセットを返す場合、または一時的なルックアップをすばやく実行する場合、これは入力を減らすためのニースの短縮構文です。ある時点でクエリを再度実行する予定がある場合は、将来の混乱と予期しない複雑さ(スキームの変更による)を避けるために、クエリを置き換えることをお勧めします。

22
vol7ron

Select句の最初のフィールドでグループ化されます

10
Daan Geurts

つまり、選択句の最初の列ごとにSQLグループがあり、常にこのGROUP BY 1ORDER BY 1と一緒に使用します。さらに、このGROUP BY 1,2,3..のように使用することもできますその条件に注意を払う必要があります。誰かが選択列を変更した場合、結果は期待したものではない可能性があり、視覚化されません

4
张艳军

Group by句の後に配置した列位置でグループ化します。

たとえば、「SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1」を実行すると、SALESMAN_NAMEでグループ化されます。

それを行う際のリスクの1つは、 'Select *'を実行し、何らかの理由で列の順序を変えてテーブルを再作成すると、予想とは異なる結果が得られることです。

4
wdoering