megasimo89
14-06-2012, 13:13
Originariamente inviato da tigerjack89
Ciao a tutti!!!
Vorrei chiedervi aiuto per la risoluzione di alcune query. Le ho già scritte di mio, ma in realtà, anche se funzionano, sembrano parecchio lunghe e confusionarie e magari c'è un modo più semplice per scriverle che a me sfugge.
Dato che sono 10 query, vi scrivo solo quelle su cui ho più dubbi :)
Il nostro database è così formato
Transazione(CodiceT , Offerta, Data, Centro di raccolta)
Offerta( CodiceO , Venditore)
Gruppo di acquisto( Acquirente, Transazione )
Composizione( Offerta, Bene )
Afferenza( Bene, Categoria )
Feedback( Acquirente, Transazione , Voto numerico, Giudizio testuale)
Acquirente(CodiceA, Città fatturazione)
Le query ci chiedono di trovare
1."Tutti gli acquirenti che hanno effettuato transazioni di beni appartenenti alla stessa categoria e che hanno espresso valutazioni negative sul venditore (voto < 3)"
2. Tutti i venditori che hanno ricevuto valutazioni negative dagli stessi acquirenti.
3. Tutti i venditori che hanno ricevuto valutazioni positive dagli acquirenti che vivono nella stessa città.
Query1
CREATE VIEW `Categoria beni transazioni` AS
SELECT
T1.`Codice transazione` AS Transazione,
A1.Bene,
A1.Categoria
FROM
Transazione T1
JOIN
Offerta O1 ON T1.Offerta = O1.`Codice offerta`
JOIN
Composizione C1 ON O1.`Codice offerta` = C1.Offerta
JOIN
Afferenza A1 ON C1.Bene = A1.Bene;
CREATE `Info voti` AS
SELECT
Acquirente,
Venditore,
Transazione,
`Voto numerico` AS Voto,
`Giudizio testuale` AS Giudizio
FROM
Feedback AS F1
JOIN
Transazione AS T1 ON F1.Transazione = T1.`Codice transazione`
JOIN
Acquirente AS A1 ON F1.Acquirente = A1.`Codice acquirente`;
CREATE VIEW `Acquirente-Categoria` AS
SELECT DISTINCT
IV1.Acquirente,
IV1.Venditore,
IV1.Voto,
IV1.Transazione,
CB1.Categoria
FROM
`Info voti` IV1
JOIN
`Categoria beni transazioni` CB1 ON IV1.Transazione = CB1.Transazione
WHERE
Voto < 3;
SELECT DISTINCT
AC1.Acquirente, AC2.Acquirente
FROM
`Acquirente-Categoria` AC1
JOIN
`Acquirente-Categoria` AC2 ON AC1.Categoria = AC2.Categoria
WHERE
AC1.Acquirente <> AC2.Acquirente AND AC1.Categoria = AC2.Categoria;
Query2
SELECT DISTINCT
IV1.Acquirente,
IV1.Venditore,
IV1.Voto,
IV2.Acquirente,
IV2.Venditore,
IV2.Voto
FROM
`Info voti` IV1
JOIN
Transazione T1 ON IV1.Transazione = T1.`Codice transazione`
JOIN
(
`Info voti` IV2
JOIN
Transazione T2 ON IV2.Transazione = T2.`Codice transazione`
)
ON T1.Venditore = T2.Venditore
WHERE
IV1.Voto < 3
AND IV2.Voto < 3
AND IV1.Acquirente = IV2.Acquirente
AND IV1.Transazione <> IV2.Transazione
;
Query3
SELECT
Venditore,
`Città fatturazione` AS `Città`,
COUNT(DISTINCT Acquirente) `Voti positivi`
FROM
`Info voti` IV1
JOIN
Acquirente A1 ON IV1.Acquirente = A1.`Codice acquirente`
WHERE
Voto > 3
GROUP BY `Città fatturazione`
HAVING `Voti positivi` > 1
;
Ringrazio in anticipo chi vorrà aiutarmi :)
Ciao a tutti!!!
Vorrei chiedervi aiuto per la risoluzione di alcune query. Le ho già scritte di mio, ma in realtà, anche se funzionano, sembrano parecchio lunghe e confusionarie e magari c'è un modo più semplice per scriverle che a me sfugge.
Dato che sono 10 query, vi scrivo solo quelle su cui ho più dubbi :)
Il nostro database è così formato
Transazione(CodiceT , Offerta, Data, Centro di raccolta)
Offerta( CodiceO , Venditore)
Gruppo di acquisto( Acquirente, Transazione )
Composizione( Offerta, Bene )
Afferenza( Bene, Categoria )
Feedback( Acquirente, Transazione , Voto numerico, Giudizio testuale)
Acquirente(CodiceA, Città fatturazione)
Le query ci chiedono di trovare
1."Tutti gli acquirenti che hanno effettuato transazioni di beni appartenenti alla stessa categoria e che hanno espresso valutazioni negative sul venditore (voto < 3)"
2. Tutti i venditori che hanno ricevuto valutazioni negative dagli stessi acquirenti.
3. Tutti i venditori che hanno ricevuto valutazioni positive dagli acquirenti che vivono nella stessa città.
Query1
CREATE VIEW `Categoria beni transazioni` AS
SELECT
T1.`Codice transazione` AS Transazione,
A1.Bene,
A1.Categoria
FROM
Transazione T1
JOIN
Offerta O1 ON T1.Offerta = O1.`Codice offerta`
JOIN
Composizione C1 ON O1.`Codice offerta` = C1.Offerta
JOIN
Afferenza A1 ON C1.Bene = A1.Bene;
CREATE `Info voti` AS
SELECT
Acquirente,
Venditore,
Transazione,
`Voto numerico` AS Voto,
`Giudizio testuale` AS Giudizio
FROM
Feedback AS F1
JOIN
Transazione AS T1 ON F1.Transazione = T1.`Codice transazione`
JOIN
Acquirente AS A1 ON F1.Acquirente = A1.`Codice acquirente`;
CREATE VIEW `Acquirente-Categoria` AS
SELECT DISTINCT
IV1.Acquirente,
IV1.Venditore,
IV1.Voto,
IV1.Transazione,
CB1.Categoria
FROM
`Info voti` IV1
JOIN
`Categoria beni transazioni` CB1 ON IV1.Transazione = CB1.Transazione
WHERE
Voto < 3;
SELECT DISTINCT
AC1.Acquirente, AC2.Acquirente
FROM
`Acquirente-Categoria` AC1
JOIN
`Acquirente-Categoria` AC2 ON AC1.Categoria = AC2.Categoria
WHERE
AC1.Acquirente <> AC2.Acquirente AND AC1.Categoria = AC2.Categoria;
Query2
SELECT DISTINCT
IV1.Acquirente,
IV1.Venditore,
IV1.Voto,
IV2.Acquirente,
IV2.Venditore,
IV2.Voto
FROM
`Info voti` IV1
JOIN
Transazione T1 ON IV1.Transazione = T1.`Codice transazione`
JOIN
(
`Info voti` IV2
JOIN
Transazione T2 ON IV2.Transazione = T2.`Codice transazione`
)
ON T1.Venditore = T2.Venditore
WHERE
IV1.Voto < 3
AND IV2.Voto < 3
AND IV1.Acquirente = IV2.Acquirente
AND IV1.Transazione <> IV2.Transazione
;
Query3
SELECT
Venditore,
`Città fatturazione` AS `Città`,
COUNT(DISTINCT Acquirente) `Voti positivi`
FROM
`Info voti` IV1
JOIN
Acquirente A1 ON IV1.Acquirente = A1.`Codice acquirente`
WHERE
Voto > 3
GROUP BY `Città fatturazione`
HAVING `Voti positivi` > 1
;
Ringrazio in anticipo chi vorrà aiutarmi :)