-1

これは多くの人にとってばかげた質問のように見えるかもしれませんが、「グループ化」が select max(...) from SQL ステートメントに与える影響について明確な説明がどこにも見つかりません。

次のデータがあります (表示されていないタイプ mediumblob の別の列イメージがあります)。

id  title                      test_id 

1  bomb                             0 
2  Soft watch                       2 
3  Dali                             1 
4  Narciss                          1 
5  The Woman In Green               0 
6  A summer in Vetheuil             0 
7  Artist's Garden                  2 
8  Beech Forest                     2 
9  Claude Monet                     0 

出演すれば分かる

select max(id) from images 
where image is not null; 

IDの最大値を取得します。つまり:

max(id) 

9

しかし、誰かが私が演奏するときに何が起こっているのか説明してもらえますか

select max(id), title, test_id 
from images 
where image is not null 
group by id; 

max(id) は有用な目的を果たさないことがわかりました (以下に結果を示します)。

  max(id)  title                      test_id 

  1  bomb                              0 
  2  Soft watch                        2 
  3  Dali                              1 
  4  Narciss                           1 
  5  The Woman In Green                0 
  6  A summer in Vetheuil              0 
  7  Artist's Garden                   2 
  8  Beech Forest                      2 
  9  Claude Monet                      0 
4

3 に答える 3

1

句を使用する場合、MAX()基本GROUP BY的に、最大値を決定する項目をグループ化する方法をクエリ エンジンに伝えます。最初の例では、1 つの列のみを選択していたので、グループ化する必要はありませんでした。しかし、2 番目の例では、複数の列がありました。そのため、最大値を見つけるために比較するものを決定する方法をクエリ エンジンに伝える必要があります。

id列ごとにグループ化するように指示しました。つまり、同じレコードを比較しid、それぞれの unique に対して最大のものを提供しますid。すべてのレコードには異なる があるためid、基本的にその句には何もしませんでした。

すべてのレコードをidof でグループ化し1(これは単一のレコードでした)、idそのグループから最大のレコード (そのレコードでした) を返しました。23などについても同じことが行われました。

ここに示した 3 つの列の場合、レコードをグループ化する意味がある唯一の場所はtest_id列です。このようなもの:

SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null 
GROUP BY test_id

これにより、 によってグループ化されるtest_idため、結果にはレコード 6 (0 の最大idtest_id)、4 (1 の最大値id) test_id、および 8 (2 の最大値) が含まidtest_idます。列内の 3 つの一意の値に基づいてレコードをこれらの 3 つのグループに分割することにより、各グループ内test_idの「最大値」を効果的に見つけることができます。id

于 2012-05-21T18:56:40.450 に答える
0

はい、あなたの例では、それは有用な目的を果たしません。

ID でグループ化し、最大 ID を見つけます。しかし、各 ID は 1 つしかないため、意味がありません。通常、MAX() は、価格やアイテム数などの数量に使用されます。

于 2012-05-21T18:54:20.857 に答える
0

Group by は、この種のクエリには使用されません。このようなクエリに使用されます。

OId OrderDate   OrderPrice  Customer

1   2008/11/12  1000    Hansen

2   2008/10/23  1600    Nilsen

3   2008/09/02  700 Hansen

4   2008/09/03  300 Hansen

5   2008/08/30  2000    Jensen

6   2008/10/04  100 Nilsen

これらの各顧客が購入した材料の合計を取得したい場合は、 group by を使用します

SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer

customer    SUM(OrderPrice)

Hansen  2000

Nilsen  1700

Jensen  2000

上記の場合、id は一意であるため、id によるグループ化は意味がありません

于 2012-05-21T18:54:22.727 に答える