Group by e select

di il
10 risposte

Group by e select

Salve stavo dando un occhiate a degli esercizi di sql e ho trovato questo

Avendo

Erbe (id ,nome)
Ricette (idtisana, iderba, quantità)

dove id , idtisana, iderba sono chiavi primarie. Iderba chiave esterna di erbe.


Visualizzare una tabella contenente i codici delle tisane in cui si utilizza per ogni erba 20 grammi di prodotto


La soluzione da

Select idtisana
From ricette
Where quantità > 20
Group by idtisana, iderba


Non é sbagliata? Iderba non dovrebbe poter essere presente in Group by non essendo in select. ... io infatti stavo pensando che andrebbe utilizzata una subquery o sbaglio? Grazie in anticipo

10 Risposte

  • Re: Group by e select

    Ciao, scusa ma iderba da dove è preso? E' sempre dentro a Ricette?
    Poi come può ricette avere 2 chiavi primarie?? Intendi dire che la chiave primaria è data dalla coppia dei 2 campi?


    Sent from my iPhone using Tapatalk
  • Re: Group by e select

    Della ha scritto:


    Ciao, scusa ma iderba da dove è preso? E' sempre dentro a Ricette?
    Poi come può ricette avere 2 chiavi primarie?? Intendi dire che la chiave primaria è data dalla coppia dei 2 campi?


    Sent from my iPhone using Tapatalk
    ho sbagliato a scrivere ora correggo comunque nell'esercizio mi dice che in ricetta , idtisana e iderba formano la chiave primaria e iderba è chiave esterna per la relazione erbe, grazie per l'aiuto
  • Re: Group by e select

    Ok, ora le tabelle hanno più senso.. in particolare la tabella Ricette esprime il fatto che ogni tisana può essere composta da più erbe.
    Tornando alla query, qualcuno mi corregga se sbaglio ma quella group by è assolutamente inutile, perché è fatta sulla chiave primaria, per cui non esisteranno mai 2 righe diverse ma con gli stessi valori per idtisana e idricetta, quindi quella group by non raggruppa nulla.
    Se anche fosse utile, comunque, quella query restituirebbe solamente quelle tisane in cui esiste almeno un'erba usata con quantità > 20, che decisamente non è ciò che chiede l'esercizio
  • Re: Group by e select

    Non devo mettere una subquery?
  • Re: Group by e select

    Sì puoi usare una subquery. Ad esempio per ottenere tutte le ricette con erbe con quantità >= 20 potresti fare una subquery in cui prendi tutte le ricette che usano almeno una pianta in quantità minore di 20, poi dall'insieme contenente tutte le ricette togli quelle trovate dalla subquery. Come risultato otterresti tutte le ricette in cui non esiste nessuna erba con quantità minore di 20.
  • Re: Group by e select

    Così potrebbe andare?


    Select idtisane
    From ricette
    Where iderba in
    (select id
    From erba , ricette
    Where quantità = 20
    Group by id)
  • Re: Group by e select

    La subquery è sicuramente sbagliata, in quanto selezioni una colonna dalla tabella erba e la where è fatta sulla tabella ricette, quindi quella subquery ti restituirà gli id di tutte le erbe.
    Prova a fare quello che ti ho detto: con una query selezioni gli id delle ricette che hanno almeno un'erba diversa da 20, poi dall'insieme di tutte le ricette togli quelle che hai trovato nella prima query.
  • Re: Group by e select

    Non vorrei complicarmi la vita , non c'è un modo più semplice per trovare il risultato?grazie comunque per l'aiuto
  • Re: Group by e select

    È molto più semplice di quello che credi:
    
    SELECT DISTINCT idtisana
    FROM Ricette
    WHERE idtisana NOT IN (SELECT idtisana FROM Ricette WHERE quantità <> 20);
    

    Sent from my iPhone using Tapatalk
  • Re: Group by e select

    Della ha scritto:


    È molto più semplice di quello che credi:
    
    SELECT DISTINCT idtisana
    FROM Ricette
    WHERE idtisana NOT IN (SELECT idtisana FROM Ricette WHERE quantità <> 20);
    

    Sent from my iPhone using Tapatalk

    grazie!!!!
Devi accedere o registrarti per scrivere nel forum
10 risposte