sql >> Database >  >> RDS >> Mysql

Rijrangschikking in een MySQL-weergave

Gebruik:

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

Het is geen ideale manier om dit te doen, omdat de query voor de num-waarde wordt uitgevoerd voor elke geretourneerde rij. Een beter idee zou zijn om een ​​NUMBERS . te maken tabel, met een enkele kolom met een nummer dat begint bij één dat oploopt tot een waanzinnig groot aantal, en voeg je vervolgens bij en verwijs je naar de NUMBERS tabel op een manier die vergelijkbaar is met het variabele voorbeeld dat volgt.

MySQL-rangschikking, of het ontbreken daarvan

U kunt een variabele definiëren om pseudorijnummerfunctionaliteit te krijgen, omdat MySQL geen rangschikkingsfuncties heeft:

SELECT t.id,
       t.variety,
       @rownum := @rownum + 1 AS num
  FROM TABLE t,
       (SELECT @rownum := 0) r
  • De SELECT @rownum := 0 definieert de variabele en stelt deze in op nul.
  • De r is een subquery/tabelalias, omdat u een foutmelding krijgt in MySQL als u geen alias voor een subquery definieert, zelfs als u deze niet gebruikt.

Kan geen variabele gebruiken in een MySQL-weergave

Als je dat doet, krijg je de 1351-foutmelding, omdat je kunt vanwege het ontwerp geen variabele in een weergave gebruiken . Het bug/feature-gedrag wordt hier gedocumenteerd .



  1. Oracle - dynamische kolomnaam in select-statement

  2. Bepaal Oracle null ==null

  3. MySQL converteert timediff-uitvoer naar dag, uur, minuut, tweede formaat

  4. C#/Oracle:codering/tekenset van query specificeren?