PDA

View Full Version : [SQL] Select particolare


roby1483
16-05-2007, 11:39
Salve a tutti,
ho la necessita' di fare una select particolare, almeno per me perche' non riesco a farla.
Ho queste due tabelle:
CREATE TABLE ALBUM(
ID_ALBUM SERIAL PRIMARY KEY,
TITOLO VARCHAR(30) NOT NULL,
ID_ARTISTA INT REFERENCES ARTISTI (ID_ARTISTA) NOT NULL,
ID_ETICHETTA INT REFERENCES ETICHETTE (ID_ETICHETTA),
COPERTINA BOOL DEFAULT FALSE NOT NULL,
NUMERO_TRACCE INT2 NOT NULL,
ID_GENERE INT REFERENCES GENERI (ID_GENERE) NOT NULL,
ID_SOTTOGENERE INT REFERENCES SOTTOGENERI (ID_SOTTOGENERE),
ANNO_PUBBLICAZIONE INT2 DEFAULT NULL,
PIETRAMILIARE BOOL DEFAULT FALSE NOT NULL,
DATA_INSERIMENTO TIMESTAMP DEFAULT LOCALTIMESTAMP NOT NULL,
ID_REDATTORE INT REFERENCES UTENTI (ID_UTENTE) NOT NULL);
CREATE TABLE VOTI_UTENTE(
ID_UTENTE INT REFERENCES UTENTI (ID_UTENTE) NOT NULL,
ID_ALBUM INT REFERENCES ALBUM (ID_ALBUM) NOT NULL,
VOTO INT2 NOT NULL,
PRIMARY KEY (ID_UTENTE, ID_ALBUM));
Il DBMS e' PostgreSQL e fino ad ora usavo questa select per tirare fuori tutte le informazioni di una album a caso:
SELECT * FROM ALBUM ORDER BY RANDOM() LIMIT 1
Adesso pero' ho bisogno di avere anche la media dei voti assegnati all'album e non sono riuscito a creare una select che funzionasse. Ho provato con le JOIN ma non sono molto pratico e non ci sono riuscito.

Spero che ci sia qualcuno disposto ad aiutarmi.
Grazie a tutti ;)

roby1483
16-05-2007, 13:30
Ci sono riuscito :yeah:

v1ruz
17-05-2007, 13:34
posta la soluzione...alemo chi avra' lo stesso problema potrà avere un aiuto cercando nel forum

roby1483
17-05-2007, 13:46
La soluzione e' questa:
select album.*, avg(voti_utente.voto) as voto
from album, voti_utente
where voti_utente.id_album=album.id_album
group by album.id_album, album.titolo, album.id_artista, album.id_etichetta, album.copertina, album.numero_tracce, album.id_genere, album.id_sottogenere, album.anno_pubblicazione, album.pietramiliare, album.data_inserimento, album.id_redattore
order by random()
limit 1;
Il problema stava nella group by, mi ricordavo erroneamente che i campi andassero messi tra parentesi quando ce n'e' piu' di uno, poi ho provato a togliere le parentesi e ha funzionato subito.