sql >> データベース >  >> RDS >> Oracle

MAX(列値)で最初の行を選択するにはどうすればよいですか?

    2番目のクエリが機能しないのはなぜですか...

    select   Item_No,
             Quantity
    from     Rec_details
    group by Item_No,
             Quantity
    having   Quantity=max(Quantity);
    

    両方のItem_Noでグループ化しています およびQuantity およびItem_No 主キーのように見え、一意の値が含まれているため、各グループには1つの行のみが含まれます。 HAVING 句はグループ内を検索するため、quantityの値がチェックされます。 はそのグループ内の最大値ですが、グループ内には1つの値しかないため、これは常に真になります。クエリは次と同等です:

    SELECT DISTINCT
           Item_No,
           Quantity
    FROM   Rec_details;
    

    最大値を取得する他のいくつかの方法:

    SQLフィドル

    Oracle11gR2スキーマのセットアップ

    create table Rec_details (item_no, Quantity ) AS
    SELECT 12507,1 FROM DUAL UNION ALL
    SELECT 12549,4 FROM DUAL UNION ALL
    SELECT 12100,8 FROM DUAL UNION ALL
    SELECT 12501,2 FROM DUAL UNION ALL
    SELECT 12201,7 FROM DUAL UNION ALL
    SELECT 12509,3 FROM DUAL UNION ALL
    SELECT 12080,1 FROM DUAL;
    

    クエリ1-最大のQuantityで1行を取得します および最新のitem_no (1つのテーブルスキャンを使用)

    SELECT MAX( item_no ) KEEP ( DENSE_RANK LAST ORDER BY Quantity ) AS Item_no,
           MAX( Quantity ) AS Quantity
    FROM   Rec_Details
    

    結果

    | ITEM_NO | QUANTITY |
    |---------|----------|
    |   12100 |        8 |
    

    クエリ2-最大のQuantityで1行を取得します および最新のitem_no (1つのテーブルスキャンを使用)

    SELECT *
    FROM   (
      SELECT *
      FROM   Rec_details
      ORDER BY Quantity DESC, Item_no DESC
    )
    WHERE ROWNUM = 1
    

    結果

    | ITEM_NO | QUANTITY |
    |---------|----------|
    |   12100 |        8 |
    

    クエリ3-最大のQuantityですべての行を取得します (1つのテーブルスキャンを使用)

    SELECT Item_no, Quantity
    FROM   (
      SELECT r.*,
             RANK() OVER ( ORDER BY Quantity DESC ) AS rnk
      FROM   Rec_details r
    )
    WHERE rnk = 1
    

    結果

    | ITEM_NO | QUANTITY |
    |---------|----------|
    |   12100 |        8 |
    

    クエリ4-最大のQuantityですべての行を取得します (2つのテーブルスキャンを使用)

    SELECT Item_no,
           Quantity
    FROM   Rec_Details
    WHERE  Quantity = ( SELECT MAX( Quantity ) FROM Rec_Details )
    

    結果

    | ITEM_NO | QUANTITY |
    |---------|----------|
    |   12100 |        8 |
    


    1. バッチファイルからOracleSQLファイルへのパラメータの受け渡し

    2. TypeError:'NoneType'オブジェクトはFlask、mysqlアプリケーションで添え字化できません

    3. 同じデータベース内の別のテーブルのデータを1つのテーブルに入力する必要があります

    4. postgresの名前変更データベースが機能しない