webForumDet fria alternativet

DISTINCT och GROUP BY

3 svar · 447 visningar · startad av Virrdo

VirrdoMedlem sedan okt. 2001152 inlägg
#1

Vad är det egentligen för skillnad på "DISTINCT" och "GROUP BY" ? Dvs när man inte vill visa alla dubletter.

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Dom är väl i viss mån besläktade

select distinct c1,c2,c3 from t

'är samma som

select c1,c2,c3 from t group by c1,c2,c3

man skulle alltså kunna ta bort distinct. I och för sig behövs inte group by heller

select a,min(b) from t group by a

'är samma sak som

select a,(select min(b) from t where a = tt.a)
 from t tt
union
select a,(select min(b) from t where a = tt.a)
 from t tt

Man kan alltså lägga till att man gör aggregeringar (sum, min, max etc) inom varje grupp när man har group by och sedan kan man ställa villkor på aggregeringen med hjälp av having

select a,sum(b) from t group by a having sum(b) > 57

Naturligtvis så går det att skriva om ovanstående fråga så att den inte använder vare sig group by eller having.

Kontentan är att SQL är väldigt redundant, det finns många sätt att formulera samma sak. Ett praktiskt problem med detta är att det kan ha stor betydelse hur man formulerar sin fråga eftersom en dbms kanske inte klarar av att optimera alla typer av frågor lika bra.
Det jag menar är att två frågor som ger samma resultat borde alltid ge samma svarstid

mheddaMedlem sedan feb. 2000385 inlägg
#3

DISTINCT och SUM

Hej på er!
En liten fråga jag har gjort denna fråga den lägger ihop men
jag vill att den ska ge ett distinct svar nu blir det project 1 och summa, lika många project 1 som det finns. Hoppas ni förstår vad jag menar.
Går det att kombinera DISTINCT med SUM eller?

$strSQL_num = "Select SUM(tid_atgang) From tbl_tidrapport WHERE namn='$namn' AND project_id='$project_id' GROUP BY project_id";

MVH hedda

aasahMedlem sedan mars 20034 471 inlägg
#4

Virrdo - distinct och group by gör inte alls samma saker!!! Distinct ser till att dubbletter inte tas med. Group by partitionerar hela tabellen per unikt värde i group by klausulen, se här.

mhedda - jag förstår inte vad du menar?

128 ms totalt · 3 externa anrop · v20260731065814-full.1211964f
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)