|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2009
Messaggi: 115
|
[mySQL] - Ottimizzazione query
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 Codice:
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;
Codice:
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
;
Codice:
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
;
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Nov 2009
Messaggi: 115
|
no one???
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:50.



















