Aggregate functions: Avg, Min, Max, Count, Sum, Group by

Avg

Finn ut hva pasientene betalte i gjennomsnitt for pasientbesøk mellom 2000 og 2003
select avg(pris)
from besoksJournal
where date_part('year', dato_legebesok) >= 2000
and date_part('year', dato_legebesok) <= 2003;
        avg         
--------------------
 118.57142857142857
(1 row)


Finn ut hva hver pasient har betalt i gjennomsnitt
select pasient_id, avg(pris)
from besoksJournal bj
group by pasient_id;
 pasient_id |         avg         
------------+---------------------
          1 | 113.333333333333333
          2 | 110.000000000000000
          3 | 117.500000000000000
          4 | 145.000000000000000
(4 rows)

Finn pasient_id og pris for de pasientene som betaler mer enn eller like mye som gjennomsnittet og finn gjennomsnittet
select NULL as pasient_id, NULL as pris, avg(pris) as "Gjennomsnittspris"
from besoksJournal
union
 select pasient_id, pris, NULL
 from besoksJournal
 where pris > 
  (select avg(pris)
   from besoksJournal);
 pasient_id | pris | Gjennomsnittspris  
------------+------+--------------------
          1 |  125 |                   
          3 |  125 |                   
          4 |  145 |                   
            |      | 118.57142857142857
(4 rows)

Min og max

Finn id-en til den pasienten som har betalt minst
select pasient_id
from besoksJournal
where pris = 
 (select min(pris)
 from besoksJournal);
 pasient_id 
------------
          1
(1 row)

Finn id-en til den pasienter som har betalt mest
select pasient_id
from besoksJournal
where pris = 
 (select max(pris)
 from besoksJournal);
 pasient_id 
------------
          4
(1 row)

Count

Finn antallet pasienter som er registrert
select count(pasient_id) as "Antall pasienter"
from pasient;
 Antall pasienter 
------------------
                6
(1 row)

Finn antallet pasienter hver lege har
select fastlege_id, count(pasient_id) as "Antall pasienter pr. lege"
from pasient
group by fastlege_id;
 fastlege_id | Antall pasienter pr. lege 
------------+----------------------------
           1 |                         2
           3 |                         2
           4 |                         1
           5 |                         1
(4 rows)

Sum

Finn hvor mye hver pasient har betalt til sammen
select pasient_id, sum(pris) as "Betalt til sammen"
from besoksJournal
group by pasient_id;
 pasient_id | Betalt til sammen 
------------+-------------------
          1 |               340
          2 |               110
          3 |               235
          4 |               145
(4 rows)

Having

Having brukes istedet for where dersom testen inneholder en av funksjonene sum, count, min, max eller avg

Skriv ut pasient_id og antall legebesøk for alle pasienter som har vært hos legen mer enn 1 gang
select pasient_id, count(pasient_id) as "Antall legebesøk"
from besoksJournal
group by pasient_id
having count(pasient_id) > 1;
 pasient_id | Antall legebesøk 
------------+------------------
          1 |                3
          3 |                2
(2 rows)

Skriv ut pasient_id og antall legebesøk for alle pasienter som har vært hos legen like mange ganger som pasient med pasient_id lik 2
select pasient_id, count(pasient_id) as "Antall legebesøk"
from besoksJournal
where pasient_id != 2
group by pasient_id
having count(pasient_id) = (
  select count(pasient_id)
  from besoksJournal
  where pasient_id = 2
  group by pasient_id);
 pasient_id | Antall legebesøk 
------------+------------------
          4 |                1
(1 row)