sql >> Database teknologi >  >> RDS >> Mysql

Rækkerangering i en MySQL-visning

Brug:

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

Det er ikke en ideel måde at gøre dette på, fordi forespørgslen efter num-værdien udføres for hver returneret række. En bedre idé ville være at oprette en NUMBERS tabel, med en enkelt kolonne, der indeholder et tal, der starter med et, der stiger til et uhyrligt stort tal, og tilslut derefter og referer til NUMRE tabel på en måde, der ligner det variabeleksempel, der følger.

MySQL-rangering eller mangel på samme

Du kan definere en variabel for at få psuedo rækkenummerfunktionalitet, fordi MySQL ikke har nogen rangeringsfunktioner:

SELECT t.id,
       t.variety,
       @rownum := @rownum + 1 AS num
  FROM TABLE t,
       (SELECT @rownum := 0) r
  • SELECT @rownum :=0 definerer variablen og sætter den til nul.
  • r er et underforespørgsel/tabelalias, fordi du får en fejl i MySQL, hvis du ikke definerer et alias for en underforespørgsel, selvom du ikke bruger det.

Kan ikke bruge en variabel i en MySQL-visning

Hvis du gør det, får du fejlen 1351, fordi du kan ikke bruge en variabel i en visning på grund af design . fejl/funktionsadfærd er dokumenteret her .



  1. Bedste måde at gemme brugeres søgeforespørgsler i ElasticSearch?

  2. Sådan tilslutter du tabeller på regex

  3. Er det muligt at gemme kommaer i stedet for point for decimalfelter i en PostgreSQL-database?

  4. Hvordan bruger man felt fra underforespørgsel i MySQL?