SQL

marktrix
CORSO(NomeC,Sezione,Professore)
ORARIO(NomeC,Sezione,Ora,Giorno)
DISPONIBILITA'(Professore,Giorno,Ora)

si richiede di trovare per ogni corso il numero complessivo di ore in cui si tiene.

SELECT Orario.NomeC SUM(Orario.Ora)
FROM Orario
GROUP BY Orario.NomeC

Una soluzione del genere mi somma le varie ore di ciascun corso? Può andare bene?

Risposte
marktrix
:? up informatici

codino75
cosa descrive il campo Orario.ora ?
ciao alex

marktrix
l'attributo ora di orario

codino75
puoi fare 1 esempio di tupla della tabella ORARIO cosi' capisco meglio ?

marktrix
eh ci fosse l'esempio avrei capito meglio anche io... :-D purtroppo li danno così gli esercizi,presumo l'attributo ora si in formato date,quello che non so s con SUM date si ha la somma delle ore e se in caso negativo come si fa a trovare il numero delle ore che a quel punto penso si debba ricorrere a un count(*)

Kawashita
Ai provato a utilizzare il comando Distinct?

in questo modo ottieni, si la somma delle ore ma distinte per corsi diversi.

SELECT DISTINCT Orario.NomeC SUM(Orario.Ora)
FROM Orario;

non te lo do per certo perchè sto seguendo il corso adesso...
:lol: :lol: :lol:

marktrix
mmm il distinct mi elimina le righe uguali nel risultato,il mio problema sta invece nella risoluzione,cioè come calcolare una somma di un attributo che non è un numero ma un date

codino75
ci sono 2 cose da risolvere:

come si trattano i dati di tipo 'date' (cioe' cosa si intende per somma di 2 date, la scappatoia sarebbe se tale tipo di dato potesse essere buono anche per considerare periodi di tempo)?

bisogna tirare fuori anche i corsi che non hanno lezioni (cioe' con orario totale di lezione pari a 0)?

marktrix
"codino75":
ci sono 2 cose da risolvere:

come si trattano i dati di tipo 'date' (cioe' cosa si intende per somma di 2 date, la scappatoia sarebbe se tale tipo di dato potesse essere buono anche per considerare periodi di tempo)?

bisogna tirare fuori anche i corsi che non hanno lezioni (cioe' con orario totale di lezione pari a 0)?


è quello che mi chiedo anche io..soprattutto il primo... :-D

codino75
a occhio direi che puoi pansare che l'attributo ORARIO.ora sia l'inizio della lezione e che essa duri '1 unita' di tempo lezione'

marktrix
pensandola così il mio ragionamento è giusto.

Purtroppo a livello teorico lascia molte ambiguità in certe situazioni.

io sarei più incline a pensarlo come un ra specifica perchè l'attributo ora compare anche in disponibilità..

codino75
ti consiglio di pensare anche alla seconda questione che ho postato prima.
i professori univesitari in cose tipo queste sono un po' snob.
infatti il testo del problema dice ' per ogni corso'

marktrix
la seconda questione tenendo conto che ora non sia date per corsi con 0 ore restituisce 0..

codino75
"marktrix":
la seconda questione tenendo conto che ora non sia date per corsi con 0 ore restituisce 0..


se un certo corso non compare nella tabella ORARIO (potrebbe succedere, a naso, se il corso non prevede lezioni) non comparira' nemmeno nella query in quanto sotto il from c'e' proprio la tabella ORARIO

marktrix
ah ok quindi la select va fatta a CORSO joinandolo a ORARIO che deve fare la sum(ora)

codino75
"marktrix":
ah ok quindi la select va fatta a CORSO joinandolo a ORARIO che deve fare la sum(ora)


anche se fai il join tra CORSO e ORARIO vale l'osservazione che ho fatto prima, se non sbaglio
mi sa che ti devi inventare qualcosa di piu' complesso.

marktrix
no scusa ma ti sbagli

SELECT Corso.NomeC restituisce tutti i corsi presenti nella tabella e anche se non sono presenti in orario devono per forza essere presenti qua.

codino75
"marktrix":
no scusa ma ti sbagli

SELECT Corso.NomeC restituisce tutti i corsi presenti nella tabella e anche se non sono presenti in orario devono per forza essere presenti qua.


mi posti il FROM che vorresti fare?

marktrix
SELECT Corso.NomeC SUM(Orario.Ora)
FROM Corso,Orario
WHERE Corso.NomeC=Orario.NomeC
GROUP BY Corso.NomeC

questo garantito al 100% restituisce tutti i corsi e a fianco mette sum ora..

il mio problema è capire sta ora come sommarla

codino75
"marktrix":
SELECT Corso.NomeC SUM(Orario.Ora)
FROM Corso,Orario
WHERE Corso.NomeC=Orario.NomeC
GROUP BY Corso.NomeC


con questa clausola where non prendi i corsi che non sono in ORARIO.NomeC

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.