agr. fce

Základní kurs podávající průřez problematikou. Jsou popsány tři úrovně pohledu na data. Konceptuální modelování je založeno na ER modelu, databázové modelování se zabývá podrobně teorií relačního modelu dat (algebra, kalkul, základy SQL, algoritmy návrhu relační databáze, normální formy) a principy objektově-relačního modelu. Transakční zpracování a paralelní přístup, algoritmy implementace relačních operací.
Uživatelský avatar
Myshaak
Matfyz(ák|ačka) level III
Příspěvky: 162
Registrován: 18. 1. 2006 22:29
Typ studia: Informatika Mgr.

agr. fce

Příspěvek od Myshaak »

Zdar! Mam celkem problem s tyma agregac. fcema. Mohl by nekdo poradit, jak vyresil jeden priklad? :)

Mam tabulky:
Rozvrh(kod_pred,rc_ucitele,kdy,kde,hodin)
Ucitel(rc_ucitele,jm_ucitele,katedra)

a chci zjistit prumerny pocet hodin, ktere uci ucitel z KSI. JAK??
(logicky bych asi potreboval nejprve pro kazdeho z KSI udelat soucet jejich hodin a z tech souctu pak udelat prumer... ale treba -teda urcite- to jde taky jinak, ja nevim, proto se ptam ;) )
"Go for the eyes Boo, go for the eyes! Yeahh!!"
Pz
Matfyz(ák|ačka) level I
Příspěvky: 20
Registrován: 24. 1. 2006 12:20
Typ studia: Informatika Bc.

Příspěvek od Pz »

SELECT AVG(hodin)
FROM (Rozvrh NATURAL JOIN Ucitel)
WHERE katedra = 'KSI'
GROUP BY katedra


mozna.. podle vysledku pisemky bych to mel pry umet ;)
Those who want, try to find the way. Those who do not want, try to find the reason.
Uživatelský avatar
Myshaak
Matfyz(ák|ačka) level III
Příspěvky: 162
Registrován: 18. 1. 2006 22:29
Typ studia: Informatika Mgr.

Příspěvek od Myshaak »

Diky za pokus! ;) Ale asi jsi me spatne pochopil, jeden ucitel muze ucit vic premetu, nejlepsi asi bude priklad:

<b>Ucitel:</b> (rc_uc, jm_uc, katedra)
rc1, "Pavel", "KSI"
rc2, "Pepa", "KSI"
rc3, "Jaja", "KAM"

<b>Rozvrh:</b> (kod, rc_uc,hodin)
001, rc1, 3
002, rc2, 1
003, rc2, 2
007, rc3, 3

...pokud nejsem uz uplne blby, tak by Tvuj dotaz vratil 2, pricemz spravna logicka odpoved je 3 (jak Pavel tak Pepa uci kazdy celkem 3 hodiny)
"Go for the eyes Boo, go for the eyes! Yeahh!!"
Uživatelský avatar
stnicolaus
Matfyz(ák|ačka) level II
Příspěvky: 73
Registrován: 22. 1. 2006 17:39
Typ studia: Informatika Bc.
Bydliště: Plzeň
Kontaktovat uživatele:

Příspěvek od stnicolaus »

Myshaak píše:Diky za pokus! ;) Ale asi jsi me spatne pochopil, jeden ucitel muze ucit vic premetu, nejlepsi asi bude priklad:

<b>Ucitel:</b> (rc_uc, jm_uc, katedra)
rc1, "Pavel", "KSI"
rc2, "Pepa", "KSI"
rc3, "Jaja", "KAM"

<b>Rozvrh:</b> (kod, rc_uc,hodin)
001, rc1, 3
002, rc2, 1
003, rc2, 2
007, rc3, 3

...pokud nejsem uz uplne blby, tak by Tvuj dotaz vratil 2, pricemz spravna logicka odpoved je 3 (jak Pavel tak Pepa uci kazdy celkem 3 hodiny)

Kód: Vybrat vše

SELECT AVG(suma)
  FROM (
    SELECT rc_ucitele, SUM(hodin) AS suma
      FROM Rozvrh NATURAL JOIN Ucitel
      WHERE katedra = 'KSI'
      GROUP BY rc_ucitele
  )
tohle by mělo běhat
InvInv

SQL Server

Příspěvek od InvInv »

Na SQL serveru SELECT FROM SELECT podle všecho nejde:

Kód: Vybrat vše

SELECT AVG(suma)
  FROM (
    SELECT rc_ucitele, SUM(hodin) AS suma
      FROM Rozvrh NATURAL JOIN Ucitel
      WHERE katedra = 'KSI'
      GROUP BY rc_ucitele
  ) 

ale je potřeba napsat to takhle:

Kód: Vybrat vše

WITH uci AS
(
      SELECT rc_ucitele, SUM(hodin) AS suma
      FROM Rozvrh NATURAL JOIN Ucitel
      WHERE katedra = 'KSI'
      GROUP BY rc_ucitele
)
SELECT AVG(suma)
FROM uci
Uživatelský avatar
stnicolaus
Matfyz(ák|ačka) level II
Příspěvky: 73
Registrován: 22. 1. 2006 17:39
Typ studia: Informatika Bc.
Bydliště: Plzeň
Kontaktovat uživatele:

Re: SQL Server

Příspěvek od stnicolaus »

InvInv píše:Na SQL serveru SELECT FROM SELECT podle všecho nejde:

Kód: Vybrat vše

SELECT AVG(suma)
  FROM (
    SELECT rc_ucitele, SUM(hodin) AS suma
      FROM Rozvrh NATURAL JOIN Ucitel
      WHERE katedra = 'KSI'
      GROUP BY rc_ucitele
  ) 

ale je potřeba napsat to takhle:

Kód: Vybrat vše

WITH uci AS
(
      SELECT rc_ucitele, SUM(hodin) AS suma
      FROM Rozvrh NATURAL JOIN Ucitel
      WHERE katedra = 'KSI'
      GROUP BY rc_ucitele
)
SELECT AVG(suma)
FROM uci
SQL server je humus :D
stinny
Matfyz(ák|ačka) level I
Příspěvky: 42
Registrován: 23. 1. 2007 15:23

Re: SQL Server

Příspěvek od stinny »

A co takhle?

Kód: Vybrat vše

SELECT SUM(hodin) / COUNT(DISTINCT rc_ucitele) FROM Rozvrh NATURAL JOIN Ucitel WHERE katedra = 'KSI'
Je to sice trochu prasarna, ale to preci vubec neni na skodu :) Hlavne je to jen jeden select. A deleni nulou nevadi, na prazdny DB by to nikdo svepravny snad nespoustel
Odpovědět

Zpět na „DBI025 Databázové systémy“