Oracle
 sql >> база данни >  >> RDS >> Oracle

Как мога да ИЗБЕРЯ първия ред с MAX (стойност на колона)?

Защо втората ви заявка не работи...

изберете Item_No, Quantityfrom Rec_detailsgroup by Item_No, Quantityhaving Quantity=max(Quantity); 

Вие групирате и по Item_No и Количество и Item_No изглежда като първичен ключ и съдържа уникални стойности, така че всяка група ще съдържа само един ред. ИМАНЕ клаузата търси в групата, така че ще провери дали стойността на количество е максималната стойност в тази група, но има само една стойност в групата, така че това винаги ще бъде вярно. Вашата заявка е еквивалентна на:

ИЗБЕРЕТЕ ОТДЕЛЕН Артикул_No, КоличествоFROM Rec_details; 

Някои други начини за получаване на максимална стойност:

SQL Fiddle

Настройка на схема на Oracle 11g R2 :

създайте таблица Rec_details (item_no, Quantity ) ASSELECT 12507,1 FROM DUAL UNION ALLSELECT 12549,4 FROM DUAL UNION ALLSELECT 12100,8 FROM DUAL UNION ALLSELECT 12501,2 FROM DUAL UNION ALLSELECT 12201,7 FROM DUAL UNION ALLSELECT 12509,3 FROM DUAL UNION ALLSELECT 12080,1 FROM DUAL; 

Заявка 1 - Вземете един ред с максимално количество и последния item_no (използване на сканиране на 1 таблица) :

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

Резултати :

<предварителен код>| АРТИКУЛ_NO | КОЛИЧЕСТВО ||---------|----------|| 12100 | 8 |

Заявка 2 - Вземете един ред с максимално количество и последния item_no (използване на сканиране на 1 таблица) :

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

Резултати :

<предварителен код>| АРТИКУЛ_NO | КОЛИЧЕСТВО ||---------|----------|| 12100 | 8 |

Заявка 3 - Вземете всички редове с максимално количество (използване на сканиране на 1 таблица) :

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

Резултати :

<предварителен код>| АРТИКУЛ_NO | КОЛИЧЕСТВО ||---------|----------|| 12100 | 8 |

Заявка 4 - Вземете всички редове с максимално количество (използвайки 2 сканирания на таблици) :

SELECT Item_no, QuantityFROM Rec_DetailsWHERE Quantity =( SELECT MAX( Quantity ) FROM Rec_Details ) 

Резултати :

<предварителен код>| АРТИКУЛ_NO | КОЛИЧЕСТВО ||---------|----------|| 12100 | 8 |

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:ORA-12154:Проблем с TNS:Excel 64-bit/Windows 10 64-bit

  2. ORA-01438:стойност, по-голяма от зададената точност, позволява тази колона - Как да разбера за коя колона се отнася?

  3. PLS-00394:Грешен брой стойности в списъка INTO на израз за извличане

  4. Oracle:указване на стойност по подразбиране за колона тип обект

  5. връзка с базата данни на oracle в web.config asp.net