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

Sådan summerer du dublerede værdier fra mysql-tabel

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

I dette tilfælde skal du have Ref_Nr i gruppen af ​​for at få de ønskede resultater. uid, baseret på eksempeldata, er ikke nødvendig; men det er klogt altid at gruppere efter de ikke-aggregerede felter fra markeringen i gruppen efter. Den eneste grund til, at dette virker i mySQL, er, fordi de forlænger gruppen af ; de fleste andre RDBMS ville kaste en fejl om de manglende ikke-aggregerede felter i gruppen af. I version 5.7.5 og nyere er denne funktion deaktiveret som standard, hvor den tidligere var aktiveret som standard.

Med hensyn til hvorfor ref_nr er nødvendig i gruppen af:

MySQL-motoren mener, at du bare vil gruppere efter dato. Så alle ref_NR'erne bliver summeret sammen, og systemet vælger simpelthen en pr. dato, der skal vises; samme for uid; men da de alle er ens; du er ligeglad. Dette er tilfældet med ref_nr.

Så for at løse problemet skal du blot tilføje ref_nr til gruppen af ​​og ud af god fra tilføje UID . Så det er godt fra til gruppe efter alle ikke-aggregerede kolonner fra vælg ind i gruppen efter.




  1. Hvordan kontrollerer man, om MySQL-forespørgslen er gyldig uden at udføre den?

  2. MySQL 5.5 udenlandsk nøgle begrænsning mislykkes, når der findes en fremmed nøgle

  3. Hvordan fungerer indeksering

  4. QSqlDatabase open returnerer altid sand efter opdatering