グループSQLの最大値を取得する

まず、各グループの最大のデータを取得することと、各グループの最大のレコードを取得することは 2 つの概念であることに注意してください。前者は非常に単純で直接グループ化されており、max() で十分です。

SQLは次のとおりです

SELECT *, max(hash) FROM ログ GROUP BY コード

 

戻って、グループ内の最初のデータの内容を * 取得し、max によって取得された結果を追加しますが、結果はそのデータと一致しません

つまり、各グループの最大のデータのみが取り出されます (最大のデータのみが必要な場合は、満足するように SQL を変更できますが、最大のデータを持つレコードを削除したい場合は、この SQL を単純に使用することはできません)。

1. 最初に並べ替えてからグループ化する

その場合、select * from log order by hash desc を使用して逆順にソートすることを考えるのが自然です。

アイデアに従って、上記をサブクエリとして扱います

コードによるグループとしての select * from (ハッシュ記述によるログ順序からの選択 *)

データを確認したところ、ソート後に制限を追加する必要があることがわかりました。そうでない場合、データは最初にソートされません。それで

select * from (select * from log order by hash desc limit 10000 ) as a group by code

 

2. サブクエリ部分はグループごとにグループ化を使用して各グループの最大値を検索し、外側のクエリではクエリ内の複数フィールドを使用します。

select * from log where(code,hash) in (SELECT code,max(hash) hash FROM log group by code)  

leetcode の質問では、2 つのフィールドで in が使用されていることがわかりました。

https://leetcode-cn.com/problems/Department-highest-salary/

 

3. Fanwai (max を通じて個々のデータの ID を取得し、その ID に従って対応するデータを確認する)
単一テーブル クエリ:
最小の ID を持つクエリ、最も単純なステートメントは次のとおりです。

select * from table order by id

where 条件を使用する必要がある場合は、次のように記述できます。

select * from table where id=(テーブルから min(id) を選択)

3.1番外2

テーブル A は製品テーブル、
テーブル B は SKU テーブル (各製品には複数の SKU (仕様) があります)
すべての製品と、各製品の最小 SKU 価格を持つデータ全体をクエリします。

 select 
 A.id,A.goodsname as title,A.norms,A.status as gstatus,A.imgurls,A.uppertime,A.downtime,A.createtime as gcreatetime,A.updatetime as gupdatetime, A.isteam,B.id asdefaultsku,B.price as minprice,B.preprice from A INNER JOIN B on A.id=B.goodsid where B.price = ( select min(B.価格) B から (B.goodsid=A.id)、A.status=1、B.status=1 で A.id で 
    グループ  
    化
    A.id
          で
     並べる 
     desc    

———————————————
著作権に関する声明: この記事は CSDN ブロガー「solmee」のオリジナル記事であり、CC 4.0 BY-SA 著作権契約に従って、転載する場合は元のソースリンクとこの声明を添付してください。
元のリンク: https://blog.csdn.net/weixin_40024174/article/details/99462595

おすすめ

転載: blog.csdn.net/qiuziqiqi/article/details/116017844