1
(SELECT * FROM (SELECT clientid,totalquantity from clientquantity 
order by quantitydate desc) AS A GROUP BY clientid);

SELECT clientid,totalquantity from clientquantity group by clientid;

誰かが上記の2つのクエリの違いを説明できますか?結果セットは、カウントされた行に関して同じです。では、2つのクエリに違いはありますか?たとえば、パフォーマンスの面で、またはデータの違い?

最初のクエリはLEFT JOIN、別のテーブルでのクエリの一部として使用されます。この投稿では、わかりやすくするために他のテーブルを削除しました。

上記は、2番目のクエリにもORDER BYが含まれている必要があり、SQLを使用する唯一の方法は、1番目のクエリと同じようにすることです。2番目のクエリからORDERBYを省略しましたが、2番目のクエリでも必要です。

ありがとう、

4

2 に答える 2

1

このSQL FIDDLE DEMOをチェックして、2 つのクエリの違いを理解してください。

  1. データを降順で日付順に並べ替え、clientId を使用してそのデータをグループ化すると、最新の日付ですべてのクライアント データが取得されます。

  2. 句を直接使用するGROUP BYと、clientId によってテーブルからすべての最初のレコードがフェッチされます。

于 2012-12-28T06:07:02.840 に答える
0

最初のクエリ(SELECT * FROM (SELECT clientid,totalquantity from clientquantity order by quantitydate desc) AS A GROUP BY clientid);には、冗長な部分のようなものがあります。クエリの最も深い部分 ( SELECT clientId,totalquantity...) は、数量日付順に並べられたテーブル自体からすべての情報を取得します。クエリの 2 番目の部分は、SELECT * FROM ...「すべてのデータを内部の結果セットから結果セットにプルする」という単純なものです。最後の部分は、その結果セットを取得し、クライアント ID でグループ化しています。

2 番目のクエリSELECT clientid,totalquantity from clientquantity group by clientid;はほぼ同じことを行いますが、より簡潔に言えば、clientid と totalquantity の列を取得し、クライアント ID でグループ化します。唯一の違いは、quantitydate の降順で並べ替えないことです。

実行すると、基本的に同じことを行います (行の順序は異なります) が、データベース エンジンは、両方のパフォーマンスがほぼ同じになるように十分に賢くある必要があります。読みやすさに関しては、2 番目のクエリを使用しORDER BY quantitydate DESC、group by ステートメントの前に追加して、最初のクエリと同じことを行うようにします (もちろん、並べ替えたくない場合を除きます)。

于 2012-12-28T04:48:55.490 に答える