Query postgres

di il
9 risposte

Query postgres

Ciao a tutti, avrei bisogno una mano su questa query:

-Elencare le lingue cui non corrisponde nessuna release (il risultato deve contenere il nome della lingua, il numero di release in quella lingua, cioè 0, e essere ordinato per lingua) (scrivere due versioni della query)

io ho le tabelle language e release. language.id fa riferimento a release.language. Sono riuscito ad ottenere tutte le lingue a cui non corrisponde nessuna release con questa query:

select language.name
from language
where language.name != 'No linguistic content'
except
select language.name
from language join release on release.language = language.id;

Però non riesco ad aggiungerci la somma(cioè 0) delle release associate.

9 Risposte

  • Re: Query postgres

    In che senso non riesci ad aggiungere la somma?
    Da quel che chiedi sembra tu debba aggiungere solo uno "0" in quanto l'obiettivo sono un'elenco di lingue a release "0"
  • Re: Query postgres

    Si esatto, ma come faccio ad aggiungere la colonna num_release e per ogni lingua inserire uno 0? cioè magari è una cavolata, ma non capisco come fare
  • Re: Query postgres

    Perchè
    select language.name, 0
    FROM...
    EXCEPT
    select language.name, release.language
    FROM...INNER JOIN....
    Non funziona?
    Se quella che precedentemente hai scritto tu funzionava e mancava solo lo 0 questa dovrebbe fare al caso tuo...
    Provala un pò.
    P.S. i Campi sono solo di esempio, non ho la struttura delle tue tabelle.
  • Re: Query postgres

    Sì, facendo qualche modifica alla tua query funziona GRAZIE! nel frattempo avevo trovato un altra soluzione un po' più eleborata.
    Già che ci sono avrei un'altra domanda. Se mi viene chiesto di restituire la SECONDA canzone più lunga e il relativo cantante, come si può fare per escludere la PRIMA più lunga?
  • Re: Query postgres

    Per più lunga cosa intendi? Hai un campo DurataCanzone?
  • Re: Query postgres

    Sì ho un campo che mi indica la durata di ogni canzone di ogni cantante. A trovare la più lunga son riuscito, è abbastanza semplice, però la seconda?
    Pensavo di trovare la canzone massima, a questo punto dalla tabella delle canzoni toglievo quella più lunga e ricalcolavo di nuovo la più lunga, ottenendo la seconda per lunghezza. Però penso ci sia un modo più semplice.
  • Re: Query postgres

    Qualcosa del genere (m'invento i campi):
    Select TOP 1 TitoloCanzone, DurataCanzoni
    FROM Canzoni WHERE DurataCanzoni < (Select Max(DurataCanzoni) as DC From Canzoni)
    ORDER BY DurataCanzoni DESC
    Provala un pò l'ho scritta di getto...
  • Re: Query postgres

    Select max(recording.length/60000)
    from recording join artist_credit on recording.artist_credit = artist_credit.id
    join artist on artist.id = artist_credit.id
    where artist.gender = 1 and recording.length <
    (select max(recording.length)
    from recording join artist_credit on recording.artist_credit = artist_credit.id
    join artist on artist.id = artist_credit.id
    where artist.gender = 1);

    Facendo così ottengo la seconda durata. Il problema è che devo avere nel risultato altri campi che mi constringerebbero a usare group by e di conseguenza il risultato non è più una singola riga.
    PS: il comando TOP non posso usarlo in quanto non fa parte del programma
  • Re: Query postgres

    Ok come non detto, son riuscito, grazie
Devi accedere o registrarti per scrivere nel forum
9 risposte