sql >> Databáze >  >> RDS >> Sqlserver

Pochopení vztahu mezi funkcemi řazení, OVER(), GROUP BY?

OVER() klauzule je potřeba, aby SQL Server přesně věděl, jak chcete určit věci jako RANK() . Co RANK() očekáváte, že nedodáte serveru SQL Server kritéria pro objednávání? Je vítězem závodu ten s nejrychlejším časem, nejpomalejším časem nebo křestním jménem podle abecedy?

Nemusíte odstraňovat ORDER BY klauzule, když přidáte ORDER BY klauzule uvnitř OVER() . Ty se používají nezávisle – jedna k určení RANK() a druhý diktovat pořadí.

Takže pokud byste například chtěli vrátit závodníky, kteří dokončili závod, ale řadit je z posledního místa na první místo, můžete říct:

SELECT 
  name, 
  finish_time, 
  [rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM 
  dbo.race_table
ORDER BY 
  finish_time DESC; -- fastest last


  1. Použití vnořených transakcí v oracle

  2. oracledb řetězení sql volání pomocí slibů

  3. MSSQL Select Top 10 vítězných skóre, včetně remíz a alespoň jednoho z každé kategorie

  4. Auditování PostgreSQL pomocí pgAudit