.dsy:it. Pages (8): « First ... « 2 3 4 5 [6] 7 8 »
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Basi di dati ~ comunicazione digitale (http://www.dsy.it/forum/forumdisplay.php?forumid=108)
-- esami perlasca 06/07 (http://www.dsy.it/forum/showthread.php?threadid=33477)


Posted by roberto85 on 21-02-2008 09:33:

Select i.nome, p.matrResponsabile, c.competenza
From impiegati i,competenze c,progetti p
where i.matr = p.matrResponsabile and i.matr = c.matr
group by c.competenza, i.nome, p.matrResponsabile
(non mi ricordo se devono andare tutti e tre nel group by)
having count (competenza) >= 5

non basta mettere nel group by solo c. competenza, i.nome?


Il group by funziona solamente se si mettono tutti i campi che ci sono nella select, sulle slide del prof nella categoria funzioni di raggruppamento c'è proprio un esempio a rigardo!


Posted by ARIEL on 21-02-2008 09:40:

C'era anche la query:

Determinare gli impiegati che non sono stati assegnati ad alcun progetto


Posted by Melodiaz on 21-02-2008 10:48:

Originally posted by Melodiaz
scusate qualcuno potrebbe postare lo schema er corretto dell'appello di gennaio? ho ancora qualche dubbio a proposito...

THX


mi autoquoto sperando che qualche anima pia mi risponda...grassie


Posted by ARIEL on 21-02-2008 11:08:

purtroppo penso che lo schema corretto non ce l'abbia nessuno!


Posted by Melodiaz on 21-02-2008 11:25:

nooooooo...va beh iniziero' a strapparmi i capelli per domani...ormai a causa di sto esame sto diventando pelato


Posted by ARIEL on 21-02-2008 11:26:

perchè invece non provi a postare i tuoi dubbi? magari qualcuno può risponderti ugualmente...


Posted by ARIEL on 21-02-2008 12:54:

Originally posted by LiJay
nell'ultima devi fare una divisione...io ho fatto così:

SELECT budget
FROM progetti p,assegnamento a
WHERE p.codP=a.codP AND Budget>=500000 AND p.nome='microsoft'
GROUP BY matr
HAVING COUNT(matr)=(SELECT COUNT(matr) FROM progetti WHERE nome='microsoft')


Io invece la farei così:

SELECT i.Matr
FROM Progetti p, Impiegati i, Assegnamento a
WHERE i.Matr=a.Matr AND p.CodP=a.CodP AND budget>='50000' AND p.Nome='Microsoft'
GROUP BY Matr
HAVING COUNT (Matr)=(SELECT COUNT (Matr) FROM Impiegati
WHERE Nome='Microsoft');


Posted by tolarian on 21-02-2008 13:53:

Originally posted by ARIEL
Io invece la farei così:

SELECT i.Matr
FROM Progetti p, Impiegati i, Assegnamento a
WHERE i.Matr=a.Matr AND p.CodP=a.CodP AND budget>='50000' AND p.Nome='Microsoft'
GROUP BY Matr
HAVING COUNT (Matr)=(SELECT COUNT (Matr) FROM Impiegati
WHERE Nome='Microsoft');

Non la capisco molto l'ultima riga...
4)determinare gli impiegati che sono stati aseegnati a tutti i progetti microsoft avente budget di almeno 500000 euro -->vuol dire di trovare gli impiegati che lavorano in tutti i progetti microsoft con un budget >= 500000 oppure trovare tutti gli impiegati che lavorano in progetti microsoft con un budget >= 500000 ???

cmq con l'having che hai scritto non risolveresti: impiegati.nome è sicuramente il nome dell'impiegato, mentre come controllo tu conteggi le matricole che lavorano in progetti microsoft >=500000 però la query tiene anche conto di quelli che lavorano in almeno uno di questi progetti...
quindi io ho scritto la query per la 2° mia ipotesi :)

Ecco quello che ho fatto io...

Es.2

impiegati(matr,nome,codDip)
dipartimenti(codDip,nome)
competenze(u][matr,competenza[/u])
progetti(codP,nome,sede,budget,matrResponsabile)
assegnamento(codP,matr,data,numore,descrizione)

1)determinare per ogni progetto presso cui ha lavorato l'impiegato 1234 il numero totale di giorni e di ore lavorativa effettuati
2)determinare le competenze per le quali esiste un unico impiegato che le possiede
3)trovare il nome e la matricola dei responsabili che possiedono almeno 5 competenze
4)determinare gli impiegati che sono stati aseegnati a tutti i progetti microsoft avente budget di almeno 500000 euro

1)SELECT p.codP, SUM(a.numore), COUNT(a.data)
FROM progetti p, assegnamento a, impiegati i
WHERE a.matr=i.matr AND p.codP=a.codP AND i.matr=’1234’
GROUP BY p.codP

2)SELECT matr, competenza
FROM competenze
GROUP BY competenza, matr
HAVING COUNT(c.competenza)=1

3)SELECT i.nome, p.matrResponsabile
FROM impiegati i, competenze c, progetti p, assegnamento a
WHERE i.matr=c.matr AND c.matr=p.matrResponsabile AND a.codP=p.codP AND a.matr=i.matr
GROUP BY i.nome, p.matrResponsabile
HAVING COUNT(c.competenze) > 4

4)SELECT i.matr
FROM impiegati i, progetti p, assegnamento a
WHERE i.matr=a.matr AND a.codP=p.codP AND p.budget >= 500000 AND p.nome=’microsoft’
GROUP BY i.matr

Es.3

AB-->E
AE-->F
AD-->B
C-->D

A destra non compare mai A e C ... quindi fanno parte della chiave;

AC-->ACD-->ABCD-->ABCDE-->ABCDEF è chiave

non è in 3NF e neanche in BCNF

ora faccio anche il resto...

PS se ho sbagliato qualcosa ditemelo ;)


Posted by tolarian on 21-02-2008 13:57:

Originally posted by ARIEL
io personalmente prima ho controllato se lo schema è minimale (ovvero se non ci sono ridondanze...i passaggi da fare li trovi sulle slide nuove sul sito di perlasca) poi ho diviso in relazioni in base alle dipendenze che avevo tipo: ho AB-->E quindi R1(ABE) e così via e poi controlli se è in 3nf.


mi potresti inviare via pm sia il link che lo usr e psw delle slide???

grazie


Posted by Kardo on 21-02-2008 14:20:

Doppio post. Sorry.


Posted by Kardo on 21-02-2008 14:21:

Originally posted by ARIEL
Io invece la farei così:

SELECT i.Matr
FROM Progetti p, Impiegati i, Assegnamento a
WHERE i.Matr=a.Matr AND p.CodP=a.CodP AND budget>='50000' AND p.Nome='Microsoft'
GROUP BY Matr
HAVING COUNT (Matr)=(SELECT COUNT (Matr) FROM Impiegati
WHERE Nome='Microsoft');



SELECT i.Matr, i.Nome
FROM Impiegati i, Progetti p, Assegnamento a
WHERE a.Matr=i.Matr AND a.codP=p.CodP AND budget>='50000' AND p.Nome='Microsoft' AND NOT EXIST (SELECT i.Nome, p.CodP
FROM Impiegati i, Progetti p, Assegnamento a
WHERE a.Matr=i.Matr AND a.codP=p.CodP AND p.Nome<>'Microsoft')


Io l'ho fatta con il group by, ma sono giuste entrambe, credo, perchè sulle slide la divisione viene espressa, o usando la doppia negazione (not exist) o con le funzioni di gruppo.


Posted by tolarian on 21-02-2008 14:49:

Originally posted by Kardo
Io l'ho fatta con il group by, ma sono giuste entrambe, credo, perchè sulle slide la divisione viene espressa, o usando la doppia negazione (not exist) o con le funzioni di gruppo.

mi potete dare il link delle slide per piacere?

grazie


Posted by ARIEL on 21-02-2008 15:00:

4)SELECT i.matr
FROM impiegati i, progetti p, assegnamento a
WHERE i.matr=a.matr AND a.codP=p.codP AND p.budget >= 500000 AND p.nome=’microsoft’
GROUP BY i.matr

Con questa query penso che nel risultato siano compresi anche quegli impiegati che sono stati assegnati a un solo progetto microsoft con budget >=50000 mentre penso che la query vuole sapere gli impiegati che partecipano a tutti i progetti microsoft...
io l'ho intesa così!


Posted by tolarian on 21-02-2008 15:16:

Originally posted by ARIEL
4)SELECT i.matr
FROM impiegati i, progetti p, assegnamento a
WHERE i.matr=a.matr AND a.codP=p.codP AND p.budget >= 500000 AND p.nome=’microsoft’
GROUP BY i.matr

Con questa query penso che nel risultato siano compresi anche quegli impiegati che sono stati assegnati a un solo progetto microsoft con budget >=50000 mentre penso che la query vuole sapere gli impiegati che partecipano a tutti i progetti microsoft...
io l'ho intesa così!


lo so, però nn penso possa funzionare

HAVING COUNT (Matr)=(SELECT COUNT (Matr) FROM Impiegati
WHERE Nome='Microsoft');

dato che conteggia le matricole sopra citate e fa un eguaglianza al conteggio di tutti gli impiegati che si chiamano Microsoft (perchè fai From impiegati Where nome='Microsoft') ... avrebbe più senso fare FROM progetti Where nome='Microsoft' ma calcoleresti tutte le persone che lavorano ad almeno un progetto microsoft ... se sto dicendo vaccate ditemelo :)


Posted by ARIEL on 21-02-2008 15:32:

Ah cavolo mi sa che avevo sbagliato a scrivere la sottoquery....così forse potrebbe andare...

SELECT i.Matr
FROM Progetti p, Impiegati i, Assegnamento a
WHERE i.Matr=a.Matr AND p.CodP=a.CodP AND budget>='50000' AND p.Nome='Microsoft'
GROUP BY Matr
HAVING COUNT (CodP)=(SELECT COUNT (CodP) FROM Progetti
WHERE Nome='Microsoft');


All times are GMT. The time now is 03:43. Pages (8): « First ... « 2 3 4 5 [6] 7 8 »
Show all 119 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.