Automegosztas

Automegosztas

Forrás:
https://informatika.fazekas.hu/erettsegi/kozepszintu-feladatok/

4. Automegosztás

🧱 1. Adatbázis létrehozása – automegosztas

A feladat Access‑ben szokott szerepelni, de az SQL‑típusok itt is egyértelműek.

Táblák helyes szerkezete

auto


CREATE TABLE auto ( 

     id INT PRIMARY KEY, 

     rendszam VARCHAR(10) UNIQUE, 

     meghajtas VARCHAR(20), 

     uj BOOLEAN );

berles

CREATE TABLE berles ( 

     id INT PRIMARY KEY, 

     autoid INT, 

     datum DATE, 

     tol TIME, 

     ig TIME, 

     tav DECIMAL(10,2), 

     FOREIGN KEY (autoid) REFERENCES auto(id) );

Az importálásnál a tabulátorral tagolt fájlok első sora a mezőneveket adja.


2. Új, elektromos autók rendszámai

(2ujelektromos)

SELECT rendszam 

FROM auto 

WHERE uj = TRUE 

     AND meghajtas = 'elektromos';


🚨 3. 2018. június 20. 22:30‑kor szóba jöhető autók

(3baleset)

A keresett időpont: 22:30 Akkor jöhet szóba egy autó, ha:

  • éppen bérelték ekkor

  • vagy pont ekkor kezdődött

  • vagy pont ekkor ért véget

SELECT a.rendszam 

FROM auto AS a 

JOIN berles AS b ON a.id = b.autoid 

WHERE b.datum = '2018-06-20' 

      AND ( (b.tol <= '22:30' AND b.ig >= '22:30') 

      OR b.tol = '22:30' OR b.ig = '22:30' 

      );

Ez a lekérdezés minden határesetet lefed, ahogy a feladat kéri.


📊 4. Autók összes megtett távolsága

(4osszesen)

SELECT a.rendszam, 

        SUM(b.tav) AS ossztav 

FROM auto AS a 

JOIN berles AS b ON a.id = b.autoid 

GROUP BY a.rendszam 

ORDER BY ossztav DESC;

A feladat szerint nem kell kerekíteni, ezért a SUM eredménye marad DECIMAL.


📅 5. Tesztüzem első és utolsó napja

(5hatarok)

SELECT MIN(datum) AS elso_nap, 

              MAX(datum) AS utolso_nap 

FROM berles;

Ez a teljes bérlési időszakot adja meg.


🔌⚡ 6. Több elektromos vagy hibrid autó van?

(6tobb)

A feladat kéri, hogy akkor is működjön, ha más hajtástípusok is bekerülnek. Ezért csak a két vizsgált kategóriát számoljuk, és egyetlen szót adunk vissza.

SELECT

     CASE

           WHEN (SELECT COUNT(*) FROM auto WHERE meghajtas = 'elektromos')

                        >

                       (SELECT COUNT(*) FROM auto WHERE meghajtas = 'hibrid')

           THEN 'elektromos'

           ELSE 'hibrid'

     END AS tobb;