Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    155

    MYSQL: problema query con sum e group by

    Buonasera,
    ho le seguenti tabelle

    tab1
    id_tab1 | ordinato | id_articolo

    tab2
    id_tab2 | id_articolo | cod_colore

    la relazione tra tab1 e tab2 è uno a molti


    ho la seguente query che mi recupera la somma degli articoli ordinati

    select sum(tab1.ordinato) as somma from tab1 left join tab2 on tab2.id_articolo = tab1.id_articolo

    il problema c'è quando ho un articolo con più colori e quindi mi va a sommare più volte l'ordine es

    tab1
    1 | 5 | 20

    tab2
    5 | 20 | ff0000
    6 | 20 | ff00ff

    eseguendo la query ottengo somma = 10

    cosa sbaglio?

    Codice PHP:
    CREATE TABLE `tab1` (
      `
    id_tab1int(3NOT NULL auto_increment,
      `
    ordinatoint(2NOT NULL,
      `
    id_articoloint(2NOT NULL,
      
    PRIMARY KEY  (`id_tab1`)
    ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    INSERT INTO `tab1VALUES (1520);


    CREATE TABLE `tab2` (
      `
    id_tab2int(3NOT NULL auto_increment,
      `
    id_articoloint(2NOT NULL,
      `
    cod_colorevarchar(6NOT NULL,
      
    PRIMARY KEY  (`id_tab2`)
    ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    INSERT INTO `tab2VALUES (120'ff0000');
    INSERT INTO `tab2VALUES (220'ff00ff');

    SELECT SUMtab1.ordinato ) AS somma
    FROM tab1
    LEFT JOIN tab2 ON tab2
    .id_articolo tab1.id_articolo 
    Grazie

  2. #2
    ma dov'è la query group by?
    Un tardo hegeliano di Busalla / allevava un gorilla nella stalla
    citando Adorno nell notti chiare / finché il primate stanco di ascoltare
    lo strangolò con una sciarpa gialla Dillo Con Parole Sue

  3. #3
    potrebbe semplicemente mancarti il raggruppamento per id_articolo - codice_colore

    codice:
    SELECT SUM( tab1.ordinato ) AS somma
    FROM tab1
    LEFT JOIN tab2 ON tab2.id_articolo = tab1.id_articolo
    group by tab2.id_articolo, tab2.cod_colore

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    155
    hai ragione stavo completando il post...
    sorry....

    cmq il group by è qui

    Codice PHP:
    select sum(tab1.ordinato) as somma from tab1 left join tab2 on tab2.id_articolo tab1.id_articolo group by tab2.id_articolo 
    effettuo questa query perché nell'eventualità di una ricerca degli ordini degli articoli di un certo colore posso fare

    Codice PHP:
    SELECT SUMtab1.ordinato ) AS somma
    FROM tab1
    LEFT JOIN tab2 ON tab2
    .id_articolo tab1.id_articolo
    WHERE tab2
    .cod_colore =  "ff0000"
    GROUP BY tab2.id_articolo 
    ma la prima query dovrebbe darmi 5 e non 10

    grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    155
    Originariamente inviato da piero.mac
    potrebbe semplicemente mancarti il raggruppamento per id_articolo - codice_colore

    codice:
    SELECT SUM( tab1.ordinato ) AS somma
    FROM tab1
    LEFT JOIN tab2 ON tab2.id_articolo = tab1.id_articolo
    group by tab2.id_articolo, tab2.cod_colore
    ti ringrazio piero.mac ma in questo modo ottengo non più la somma ma due record

    Codice PHP:
    somma
    5


  6. #6
    Originariamente inviato da goeasy
    ti ringrazio piero.mac ma in questo modo ottengo non più la somma ma due record

    Codice PHP:
    somma
    5

    se somma ottieni dieci se non somma ottieni due volte 5.

    a questo punto ti resta solo dire cosa vorresti fare con questa la query.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    155
    con quella query vorrei ottenere il numero la somma degli articoli ordinati e successivamente permettere di effettuare una ricerca mirata per colore
    (quella funziona)

    Codice PHP:
    SELECT SUMtab1.ordinato ) AS somma 
    FROM tab1 
    LEFT JOIN tab2 ON tab2
    .id_articolo tab1.id_articolo 
    WHERE tab2
    .cod_colore =  "ff0000" 
    GROUP BY tab2.id_articolo 

  8. #8
    Originariamente inviato da goeasy
    con quella query vorrei ottenere il numero la somma degli articoli ordinati e successivamente permettere di effettuare una ricerca mirata per colore
    (quella funziona)

    Codice PHP:
    SELECT SUMtab1.ordinato ) AS somma 
    FROM tab1 
    LEFT JOIN tab2 ON tab2
    .id_articolo tab1.id_articolo 
    WHERE tab2
    .cod_colore =  "ff0000" 
    GROUP BY tab2.id_articolo 
    se raggruppi per id_articolo ti dara' la somma di tutti gli ordini corrispondenti all'id_articolo, cioe' 10
    se raggruppi per id_articolo, cod_colore ottieni la quantita' delle ordinazioni suddivise per colore.

    Se vuoi identificare codice e colore aggiungili nella select:

    Codice PHP:
    SELECT tab1.id_articolotab2.cod_coloreSUMtab1.ordinato ) AS somma 
    FROM tab1 
    LEFT JOIN tab2 ON tab2
    .id_articolo tab1.id_articolo 
    GROUP BY tab2
    .id_articolotab2.cod_colore 
    Se vuoi la somma totale degli articoli ordinati basta contare sulla tab1.

    Codice PHP:
    SELECT SUMtab1.ordinato ) AS somma 
    FROM tab1 

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    155
    grazie piero.mac,
    quello che vorrei fare è avere una singola query

    Codice PHP:
    SELECT SUMtab1.ordinato ) AS somma 
    FROM tab1 
    LEFT JOIN tab2 ON tab2
    .id_articolo tab1.id_articolo 
    $where
    GROUP BY tab2
    .id_articolo 
    dove posso aggiungere un $where x le varie ricerche
    es: ricerca x colore, x articolo e così via

    ma dalla tua risposta capisco che non è possibile... giusto?

    grazie

  10. #10
    Originariamente inviato da goeasy
    grazie piero.mac,
    quello che vorrei fare è avere una singola query

    Codice PHP:
    SELECT SUMtab1.ordinato ) AS somma 
    FROM tab1 
    LEFT JOIN tab2 ON tab2
    .id_articolo tab1.id_articolo 
    $where
    GROUP BY tab2
    .id_articolo 
    dove posso aggiungere un $where x le varie ricerche
    es: ricerca x colore, x articolo e così via

    ma dalla tua risposta capisco che non è possibile... giusto?

    grazie
    puoi mettere tutte le condizioni che vuoi. Quello che non si riesce a capire e' come tratti "id_articolo". Mi spiego: un id_articolo dovrebbe cambiare a seconda della "definizione che vuoi dare al determinato articolo. Se nello stesso id_articolo si trovano elementi non omogenei (es.: colore) allora dovrai suddividere la query in modo da filtrare solo l'elemento desiderato. La query che proponi e' corretta, aggiungi nel where il filtro desiderato.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.