1

MySQL での GROUP by 句の正しい使い方を理解するのが困難です。集計関数と組み合わせて使用​​されます。パターンは次のとおりです。

SELECT column1, column2, ... column_n, aggregate_function (expression)
   FROM tables
GROUP BY column1, column2, ... column_n;

しかし、私が理解していないのは、GROUP BYの後に、集計関数を実行しなかったすべての列をリストする必要があるかどうかです...これは単純なルールですか、それとも何か誤解しましたか? ありがとう..

4

3 に答える 3

1

答えは、できますが、そうする必要はありません。

次のようなクエリは、標準 SQL では違法ですが、MySQL では合法です。

SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o, customers AS c
WHERE o.custid = c.custid
GROUP BY o.custid;

ただし、サーバーは各グループから任意の値を自由に選択できるため、それらが同じでない限り、選択された値は不確定です。

このリンクを参照してください: http://dev.mysql.com/doc/refman/5.1/en/group-by-extensions.html

于 2013-08-23T11:25:16.083 に答える
0

Mysqlでこれを行う必要はありませんが、グループ化されていない/集約されていない列に対して予測できない結果が得られます。

mysql doc に記載されているとおり:

サーバーは各グループから任意の値を自由に選択できるため、それらが同じでない限り、選択された値は不確定です。

しかし、ANSI であり、ほとんどの dbms で必須であり、予測可能な結果が得られるため、すべてをリストすることをお勧めします。

予測不可能な例

テーブルを想像してください

id, code, name

値付き

1, 2, 'a';
2, 2, 'b';

あなたが作るなら

select code, name, count(*)
group by code;

返される行は 1 行だけですが、name の戻り値として 'a' または 'b' のいずれかを持つことができます。

于 2013-08-23T11:24:15.703 に答える
0

多くのproduct_idを持つデータベースがある場合

たとえば、製品テーブルと注文テーブルがあります。合計製品を順番に取得したいだけです。次に、を使用しますGROUP BY product_id。そして、あなたはユニークなIDでのみ取得します.

これを読んで理解を深めましょうGROUP BY

GROUP BY SQL

于 2013-08-23T11:26:25.297 に答える