sql >> Databasteknik >  >> RDS >> Mysql

Radrankning i en MySQL-vy

Använd:

SELECT t.id,
       t.variety,
       (SELECT COUNT(*) FROM TABLE WHERE id < t.id) +1 AS NUM
  FROM TABLE t

Det är inte ett idealiskt sätt att göra detta, eftersom frågan för num-värdet kommer att köras för varje rad som returneras. En bättre idé skulle vara att skapa en NUMBERS tabell, med en enda kolumn som innehåller ett nummer som börjar på ett som ökar till ett oerhört stort antal, och sedan gå med och referera till NUMBERS tabell på ett sätt som liknar variabelexemplet som följer.

MySQL-rankning, eller brist på sådan

Du kan definiera en variabel för att få psuedo radnummerfunktionalitet, eftersom MySQL inte har några rankningsfunktioner:

SELECT t.id,
       t.variety,
       @rownum := @rownum + 1 AS num
  FROM TABLE t,
       (SELECT @rownum := 0) r
  • SELECT @rownum := 0 definierar variabeln och ställer in den på noll.
  • r är en underfråga/tabellalias, eftersom du får ett felmeddelande i MySQL om du inte definierar ett alias för en underfråga, även om du inte använder det.

Kan inte använda en variabel i en MySQL-vy

Om du gör det får du 1351-felet eftersom du kan inte använda en variabel i en vy på grund av design . bugg-/funktionsbeteende dokumenteras här .



  1. Söker efter de 5 platserna som ligger närmast ett postnummer – vilken väg ska jag gå?

  2. Räkna rekord för varje månad under ett år

  3. Åtgärda SQL-databasåterställning väntande problem med nekad åtkomst

  4. Finns det något sätt att konvertera alla befintliga tabelldata till UTF8-sortering?