Samsöfnun og hópun
Samsöfnun og hópun gagna með SQL, þar sem farið er yfir notkun á föllum eins og AVG, COUNT og GROUP BY til að framkvæma útreikninga á gögnum jafnvel eftir hópun gagna með eða án skilyrða.
Samsöfnun gagna
- Oft viljum við finna heildarupplýsingar um gögn til að mynda fyrir hópa.
- SQLite býður meðal annars upp á þessar aðgerðir:
- Meðaltal -
AVG() - Lággildi -
MIN() - Hágildi -
MAX() - Summa -
SUM() - Teljari -
COUNT()
- Meðaltal -
Til að finna meðalbið einstaklinga eftir skurðaðgerð:
SELECT avg(Patient_DaysOnWaitingList)
FROM Patient_list;Til að finna hágildi (MAX) og lággildi (MIN):
SELECT MAX(Patient_DaysOnWaitingList)
FROM Patient_list;Samsöfnun með skilyrðum
Einnig er hægt að nota þetta með skilyrðum. Til dæmis, ef við viljum reikna út meðalbiðtíma þeirra sem hafa beðið eftir aðgerð og eru undir 50 ára:
SELECT AVG(Patient_DaysOnWaitingList) AS Avg_Waiting_Time
FROM Patient_list
WHERE Patient_Age < 50;þar sem AS er notað til að búa til nafn fyrir niðurstöðuna.
Stjórnun marktækra stafa
Til að stýra marktækum stöfum er hægt að nota fallið ROUND():
SELECT ROUND(AVG(Patient_DaysOnWaitingList), 2) AS Meðaltal
FROM Patient_list
WHERE Patient_Age < 50;Gefur: 36.55 í stað 36.5454545454545.
Teljari - COUNT()
Oft viljum við telja línur í töflum. Notum til þess fallið COUNT():
Til að telja allar línur í töflu:
SELECT COUNT(*) FROM Patient_list;Til að telja öll gildi í ákveðnum dálki:
SELECT COUNT(Patient_Age) FROM Patient_list;Til að telja ólík gildi í dálki, notum við
DISTINCT():SELECT COUNT(DISTINCT Patient_Age) FROM Patient_list;
Hópun gagna - GROUP BY
Til að finna meðaltal eftir hópi (t.d. aldur) eru tvær leiðir færar:
Gera nokkrar fyrirspurnir:
sql SELECT AVG(Patient_DaysOnWaitingList) AS Avg_Waiting_Time FROM Patient_list WHERE Patient_Sex = 'M'; SELECT AVG(Patient_DaysOnWaitingList) AS Avg_Waiting_Time FROM Patient_list WHERE Patient_Sex = 'F';Einfaldara er þó að nota hópa með
GROUP BYog finna þannig meðaltal eftir aldurshópum:sql SELECT Patient_Sex, AVG(Patient_DaysOnWaitingList) AS Avg_Waiting_Time FROM Patient_list GROUP BY Patient_Sex;Þessi leið er miklu skilvirkari og skiljanlegri.Athugið: Ef við veljum dálk sem er ekki í
GROUP BYklausu, þá leyfa sum gagnagrunnsmál ekki að keyra skipunina nema það sé með samsöfnunarfalli. Þetta er ekki tilfellið í SQLite. Hér væri t.d. hægt að veljaPatient_Agebeint, en þá fáum við bara eitthvert gildi fyrir þann hóp skilgreindan meðGROUP BY.
Reglur um hópun
Almennt má nota fleiri en einn dálk í GROUP BY. Í þeim tilfellum er hópað á alla dálkana sem eru útlistaðir:
SELECT col1, col2, AVG(col3)
FROM tbl
GROUP BY col1, col2;Þetta gefur okkur allar mögulegar samsetningar af col1 og col2 og finnur meðaltal af col3 fyrir hverja samsetningu. Til dæmis væri minsta bið eftir kyni og aldri fundin með:
SELECT Patient_Sex, Patient_Age, MIN(Patient_DaysOnWaitinglist) AS Min_Waiting_Time
FROM Patient_list
GROUP BY Patient_Sex, Patient_Age;Röðun
Yfirleitt er úttakinu raðað eftir hópum. Til að vera viss um ákveðna röðun úttaks, notum við ORDER BY. Hægt er að raða eftir nafni dálks eða númeri dálks:
SELECT Patient_Sex, Patient_Age, MIN(Patient_DaysOnWaitinglist) AS Min_Waiting_Time
FROM Patient_list
GROUP BY Patient_Sex, Patient_Age
ORDER BY 3 DESC, Patient_Sex;Að velja eftir númeri dálks er sérstaklega hentugt þegar við viljum raða eftir útreikningum.
Velja úr hópum
Til að velja úr hópum, notum við HAVING eftir GROUP BY klausu. Þetta er svipað og WHERE en er framkvæmt eftir hópun:
SELECT Patient_Age, AVG(Patient_DaysOnWaitingList) AS Avg_Waiting_Time
FROM Patient_list
GROUP BY Patient_Age
HAVING COUNT(*) > 1;Athugið: Hægt er að nota bæði
WHEREogHAVINGí sömu skipun. -WHEREer notað til að sía út línur áður en hópar eru gerðir, en -HAVINGá einungis við samsöfnuðu upplýsinganna fyrir hópinn.