Mysql
 sql >> Database >  >> RDS >> Mysql

Come sommare i valori duplicati dalla tabella MySQL

SELECT  uid 
     ,  date 
     , SUM(USD) AS USD 
     ,  Ref_Nr  
  FROM my_table
 GROUP 
    BY `date`, Ref_Nr, uid;

In questo caso è necessario avere Ref_Nr nel gruppo by per ottenere i risultati desiderati. uid, basato su dati di esempio, non è necessario; ma è consigliabile raggruppare sempre in base ai campi non aggregati dalla selezione nel raggruppamento per. L'unico motivo per cui funziona in MySQL è perché estende il gruppo da ; la maggior parte degli altri RDBMS genererebbe un errore sui campi non aggregati mancanti nel gruppo per. Nella versione 5.7.5 e successive questa funzione è disabilitata per impostazione predefinita se abilitata per impostazione predefinita in precedenza.

Sul motivo per cui ref_nr è necessario nel gruppo da:

Il motore MySQL crede che tu voglia semplicemente raggruppare per data. Quindi tutti i ref_NR vengono sommati e il sistema ne sceglie semplicemente uno per data da visualizzare; lo stesso per uid; ma poiché sono tutti uguali; non ti interessa. Questo è il caso di ref_nr.

Quindi, per risolvere il problema, aggiungi semplicemente ref_nr al gruppo per e fuori di buono da aggiungere UID . Quindi è bene raggruppare per tutte le colonne non aggregate dalla selezione al raggruppamento per.