sql >> Databasteknik >  >> RDS >> Mysql

Hur genererar man sekvensnummer i MySQL-vy?

Tekniskt sett vill du ha något sådant här för att simulera rankning eller ett radnummer.

CREATE VIEW table_view 
AS
 SELECT
  *
  , (@row_number := @row_number + 1) AS row_number 
 FROM 
  table
 # Because a SQL table is a unsorted set off data ORDER BY is needed to get stabile ordered results.
 ORDER BY
  table.column ASC 
CROSS JOIN (SELECT @row_number := 0) AS init_user_var  

Du kan inte använda denna SQL-kod, du får felet nedan om du försöker skapa en vy med en användarvariabel.

Error Code: 1351
View's SELECT contains a variable or parameter

SQL-koden nedan gör det också möjligt att generera radnummer. Detta förutsätter att du har en id-kolumn som genereras med AUTO_INCREMENT. Men underfrågan är en korrelerad underfråga, vilket gör exekveringen mycket långsam på större tabeller eftersom räkningen måste utföras på varje post.

CREATE VIEW table_view
AS
 SELECT 
  *
  , (SELECT COUNT(*) + 1 FROM table inner WHERE inner.id < outer.id) AS row_number
 FROM 
   table outer

Endast MySQL 8.0+.

MySQL stöder fönsterfunktioner så inga MySQL:s användarvariabler behövs för att simulera rankning eller ett radnummer.

CREATE VIEW table_view 
AS
 SELECT
  *
 # Because a SQL table is a unsorted set off data ORDER BY is needed to get stabile ordered results.
  , (ROW_NUMBER() OVER (ORDER BY table.column ASC)) AS row_number
 FROM 
  table


  1. Kan inte lagra UTF8-tecken i MySQL

  2. mysql lagrad procedurfel (1172, 'Resultat bestod av mer än en rad')

  3. Varför fungerar inte samtalssessionen? (kodantändare 3)

  4. Databasen tas inte bort när du avinstallerar Android-appen