it-swarm.it

Cosa significa la clausola SQL "GROUP BY 1"?

Qualcuno mi ha inviato una query SQL in cui la clausola GROUP BY Consisteva nell'istruzione: GROUP BY 1.

Questo deve essere un errore di battitura giusto? Nessuna colonna è data l'alias 1. Cosa potrebbe significare questo? Ho ragione a supporre che questo debba essere un errore di battitura?

168
Spencer

Significa raggruppare per la prima colonna indipendentemente da come si chiama. Puoi fare lo stesso con ORDER BY.

195
Yuck
SELECT account_id, open_emp_id
         ^^^^        ^^^^
          1           2

FROM account
GROUP BY 1;

Nella query precedente GROUP BY 1 si riferisce a first column in select statement che è account_id.

Puoi anche specificare in ORDER BY.

Nota: il numero in ORDER BY e GROUP BY inizia sempre con 1 non con 0.

61
mr_eclair

Oltre al raggruppamento per nome del campo, puoi anche raggruppare per ordinale o posizione del campo all'interno della tabella. 1 corrisponde al primo campo (indipendentemente dal nome), 2 è il secondo e così via.

Questo è generalmente sconsigliato se stai raggruppando qualcosa di specifico, poiché la struttura della tabella/vista potrebbe cambiare. Inoltre, potrebbe essere difficile comprendere rapidamente cosa sta facendo la tua query SQL se non hai memorizzato i campi della tabella.

Se stai restituendo un set unico o eseguendo rapidamente una ricerca temporanea, questa è una sintassi abbreviata di Nizza per ridurre la digitazione. Se prevedi di eseguire nuovamente la query a un certo punto, ti consiglio di sostituirli per evitare confusioni future e complicazioni impreviste (dovute a modifiche dello schema).

22
vol7ron

Raggrupperà per primo campo nella clausola select

10
Daan Geurts

Ciò significa che sql group per la 1a colonna nella clausola select, utilizziamo sempre questo GROUP BY 1 insieme a ORDER BY 1, inoltre puoi anche usare in questo modo GROUP BY 1,2,3.., ovviamente è conveniente per noi, ma devi prestare attenzione a quella condizione, il risultato potrebbe non essere quello che desideri se qualcuno ha modificato le tue colonne selezionate e non viene visualizzato

4
张艳军

Raggrupperà per la posizione della colonna che hai inserito dopo la clausola group by.

ad esempio se si esegue 'SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1' verrà raggruppato per SALESMAN_NAME.

Un rischio nel farlo è se corri "Select * 'e per qualche motivo ricreare la tabella con colonne in un ordine diverso, ti darà un risultato diverso da quello che ti aspetteresti.

4
wdoering