Restituisce più colonne con SQL dove Group By si trova su una colonna [chiusa]

0

Ho notato che tutte le colonne in una query di selezione SQL dovrebbero essere in una funzione di aggregazione, perché altrimenti il valore di output per il gruppo sarebbe arbitrario.

Questo ha senso. Ma quando le altre colonne hanno lo stesso valore, non importa quale viene restituito. C'è un modo per specificare questo o semplicemente usare MAX () o MIN () sulle colonne varchar?

    
posta voddy 10.04.2014 - 06:08
fonte

2 risposte

4

Se non desideri aggregare una o più colonne che devono essere visualizzate, includile nell'elenco delle colonne della query e le colonne da raggruppare in base all'elenco.

SELECT Col1, Col2, SUM(Col3) AS Col3Total
FROM Table
GROUP BY Col1, Col2
ORDER BY Col1, Col2;

Nell'esempio precedente, i dati da Col3 vengono sommati utilizzando i dati combinati di Col1 e Col2 per determinare dove è separata l'aggregazione. In altre parole, quando il valore di Col1 o Col2 cambia, viene creato un nuovo bucket per una somma parziale di Col3 . I dati in uscita potrebbero essere come questo:

Col1  Col2  Col3Total
====  ====  =========
A     A     4
A     B     97
B     A     1
B     B     NULL - assumes a NULL value was found in the Col3 data
B     C     2

Se vuoi dare per scontato che Col2 abbia un unico valore di corrispondenza per%% distinto, si vorrebbe qualcosa di simile:

Col1  Col2  Col3Total
====  ====  =========
A     Y     101
B     Z     NULL - assumes a NULL value was found in the Col3 data

Funzione Microsoft TSQL SUM

Funzioni Oracle SQL Aggregate

Funzioni MySQL SQL Aggregate

    
risposta data 10.04.2014 - 08:50
fonte
1

But when the other columns are same in value, it doesn't matter which is returned.

Sono d'accordo con questo.

Alcuni DBMS implementano funzioni "aggregate" come FIRST e LAST per mantenere la "purezza" dell'istruzione select ma, se i valori sono uguali, non dovrebbero fare alcuna differenza e MIN o MAX lo faranno altrettanto bene.

Ovviamente, non puoi mai garantire che stanno per rimanere lo stesso ...

    
risposta data 10.04.2014 - 14:32
fonte

Leggi altre domande sui tag