sql >> Database >  >> RDS >> Mysql

Hoe de dubbele waarden uit de mysql-tabel optellen?

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

In dit geval moet u Ref_Nr in de groep door hebben om de gewenste resultaten te krijgen. uid, gebaseerd op voorbeeldgegevens, is niet nodig; maar het is verstandig om altijd te groeperen op de niet-geaggregeerde velden van de select in de group by. De enige reden waarom dit werkt in mySQL is omdat ze uitbreiden de groep door ; de meeste andere RDBMS zouden een foutmelding geven over de ontbrekende niet-geaggregeerde velden in de groep door. In versie 5.7.5 en hoger is deze functie standaard uitgeschakeld waar deze eerder standaard was ingeschakeld.

Waarom ref_nr nodig is in de groep door:

De mySQL-engine gelooft dat u alleen op datum wilt groeperen. Dus alle ref_NR's worden bij elkaar opgeteld en het systeem kiest er gewoon één per datum om weer te geven; hetzelfde voor uid; maar aangezien ze allemaal hetzelfde zijn; het maakt je niet uit. Dit is niet het geval met de ref_nr.

Dus om het probleem op te lossen, voegt u gewoon ref_nr . toe aan de groep door en niet goed van add UID . Het is dus goed van om te groeperen op alle niet-geaggregeerde kolommen van de selectie in de groep op.




  1. MySQL converteren naar Doctrine Query Builder. Problemen met IF en CONCAT. Of een andere benadering voor subquery's op select

  2. Mysql-toegang op afstand

  3. Hoe krijg ik het huidige jaar met SQL op Oracle?

  4. Tips voor het op afstand beheren van PostgreSQL