Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [MySQL] Problemi con SUM() e GROUP BY()

    Data la query:

    Codice PHP:
    SELECT

    tab1
    .col1,
    tab2.col1,
    tab1.col1*tab2.col1 as nuova_colonna,

    sum(nuova_colonna) as nuova_colonna_2,

    sum(tab2.col1) as nuova_colonna_3

    FROM

    tab1

    LEFT JOIN

    tab2

    ON tab2
    .col3 tab1.col3
    AND tab2.col4 tab1.col4

    WHERE
    tab1
    .col3 1
    AND
    tab1.col5 
    Il problema riguarda il fatto che non riesco ad ottenere
    1. nuova_colonna_2 (#1054 - Unknown column 'nuova_colonna' in 'field list' )
    2. nuova_colonna_3 (#1140 - Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause)

    Ovviamente in 1. cerco la somma della colonna nuova_colonna creata nella query stessa, in 2. invece la somma di una colonna esistente (per tutte le righe che la query genera!).

    Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Non puoi utilizzare una colonna che hai "creato" tramite alias nella stessa select.

    Quindi dovrai fare

    sum(tab1.col1*tab2.col1) as nuova_colonna2

    e poi manca la clausola group by.

  3. #3
    Originariamente inviato da nicola75ss
    Non puoi utilizzare una colonna che hai "creato" tramite alias nella stessa select.

    Quindi dovrai fare

    sum(tab1.col1*tab2.col1) as nuova_colonna2

    e poi manca la clausola group by.
    sul sum(...) mi sta bene come soluzione, ma non capivo perché non potevo usare il mio metodo.

    Per la clausola group by... io voglio sommare tutta la colonna (cioè tutte le righe comprese) nella select.

    Grazie comunque!

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    togli tab1.col1 e tab2.col1 dalla select

  5. #5
    Originariamente inviato da lore83
    sul sum(...) mi sta bene come soluzione, ma non capivo perché non potevo usare il mio metodo.

    Per la clausola group by... io voglio sommare tutta la colonna (cioè tutte le righe comprese) nella select.

    Grazie comunque!
    Se nella SELECT usi gli operatori aggregati quali SUM(), MIN(), MAX(), COUNT() ecc. devi per forza utilizzare la clausula GROUP BY, magari raggruppando i risultati per un altro campo restituito dalla select. Ad esempio:

    SELECT ID, nome, cognome, stipendio, SUM(stipendio) AS totale FROM impiegati GROUP BY Cognome.

    Se puoi vuoi applicare dei filtri sull'operatore aggregato devi utilizzare HAVING anzichè WHERE.
    Here Comes The Music Ecstasy

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 © 2025 vBulletin Solutions, Inc. All rights reserved.