誰かが私にGROUP BY
句がステートメントGROUP BY 1
からなるSQLクエリを送信しました。
これはタイプミスである必要がありますか?エイリアス1が指定されている列はありません。これはどういう意味ですか?これはタイプミスでなければならないと思いますか?
それは何と呼ばれているかに関係なく、最初の列でグループ化することを意味します。 ORDER BY
でも同じことができます。
SELECT account_id, open_emp_id
^^^^ ^^^^
1 2
FROM account
GROUP BY 1;
上記のクエリでは、GROUP BY 1
はfirst column in select statement
であるaccount_id
を指します。
ORDER BY
で指定することもできます。
注:ORDER BYおよびGROUP BYの番号は、0ではなく常に1で始まります。
フィールド名によるグループ化に加えて、順序、またはテーブル内のフィールドの位置によってグループ化することもできます。 1は(名前に関係なく)最初のフィールドに対応し、2は2番目のフィールドに対応します。
テーブル/ビューの構造が変更される可能性があるため、特定の何かでグループ化する場合、これは一般に不適切です。また、テーブルのフィールドを記憶していないと、SQLクエリが何をしているのかをすばやく理解するのが難しい場合があります。
一意のセットを返す場合、または一時的なルックアップをすばやく実行する場合、これは入力を減らすためのニースの短縮構文です。ある時点でクエリを再度実行する予定がある場合は、将来の混乱と予期しない複雑さ(スキームの変更による)を避けるために、クエリを置き換えることをお勧めします。
Select句の最初のフィールドでグループ化されます
つまり、選択句の最初の列ごとにSQLグループがあり、常にこのGROUP BY 1
をORDER BY 1
と一緒に使用します。さらに、このGROUP BY 1,2,3..
のように使用することもできますその条件に注意を払う必要があります。誰かが選択列を変更した場合、結果は期待したものではない可能性があり、視覚化されません
Group by句の後に配置した列位置でグループ化します。
たとえば、「SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1
」を実行すると、SALESMAN_NAME
でグループ化されます。
それを行う際のリスクの1つは、 'Select *
'を実行し、何らかの理由で列の順序を変えてテーブルを再作成すると、予想とは異なる結果が得られることです。