sql >> Database >  >> RDS >> Sqlserver

sql groeperen op versus onderscheiden

GROUP BY wijst groepen rijen toe aan één rij, per afzonderlijke waarde in specifiek kolommen, die niet eens per se in de selectielijst hoeven te staan.

SELECT b, c, d FROM table1 GROUP BY a;

Deze query is legale SQL (correctie: alleen in MySQL; eigenlijk is het geen standaard SQL en wordt het niet ondersteund door andere merken). MySQL accepteert het en vertrouwt erop dat u weet wat u doet, door b te selecteren , c , en d op een ondubbelzinnige manier omdat het functionele afhankelijkheden zijn van a .

Microsoft SQL Server en andere merken staan ​​deze query echter niet toe, omdat het de functionele afhankelijkheden niet gemakkelijk kan bepalen. bewerken: In plaats daarvan vereist standaard SQL dat u de Single-Value Rule . volgt , d.w.z. elke kolom in de selectielijst moet ofwel worden genoemd in de GROUP BY clausule of anders een argument zijn voor een set-functie.

Terwijl DISTINCT kijkt altijd naar alle kolommen in de selectielijst, en alleen die kolommen. Het is een veel voorkomende misvatting dat DISTINCT stelt u in staat om de kolommen te specificeren:

SELECT DISTINCT(a), b, c FROM table1;

Ondanks de haakjes die DISTINCT . maken eruit zien als een functieaanroep, dat is het niet. Het is een zoekoptie en een afzonderlijke waarde in een van de drie velden van de selectielijst leidt tot een afzonderlijke rij in het zoekresultaat. Een van de uitdrukkingen in deze selectielijst heeft haakjes eromheen, maar dit heeft geen invloed op het resultaat.



  1. Hoe kan ik meerdere functie-evaluaties vermijden met de (func()).* syntaxis in een SQL-query?

  2. Cursorgegevens in een array plaatsen

  3. onopgeloste verwijzing naar object [INFORMATION_SCHEMA].[TABLES]

  4. Android Room:hoe kan ik het hernoemen van kolommen migreren?