Vraag SUM (DISTINCT) Gebaseerd op andere kolommen


Ik heb momenteel een tabel die er ongeveer zo uitziet:

+------+-------+------------+------------+
| id   | rate  | first_name | last_name  |
+------+-------+------------+------------+

Wat ik moet doen is de SUM van de koerskolom, maar slechts één keer voor elke naam. Ik heb bijvoorbeeld drie rijen met de naam John Doe, elk met rate 8. Ik heb de SUM van die rijen is 8, niet 24, dus telt deze eenmaal voor elke groep namen.

SUM(DISTINCT last_name, first_name) zou natuurlijk niet werken, omdat ik de koerskolom probeer samen te vatten, niet de namen. Ik weet het bij het tellen van individuele records die ik kan gebruiken COUNT(DISTINCT last_name, first_name), en dat is het soort gedrag dat ik probeer te verkrijgen SUM.

Hoe kan ik rechtvaardig worden SUM één tarief voor elke naam?

Bij voorbaat bedankt!


13
2017-08-02 16:58


oorsprong


antwoorden:


select sum (rate)
from yourTable
group by first_name, last_name

Bewerk

Als je alle som van die kleine wilt krijgen "sums", je krijgt een optelsom van alle tafels ..

Select sum(rate) from YourTable

maar, als om wat voor reden dan ook differents zijn (als je een where, bijvoorbeeld) en je hebt een bedrag nodig voor dat select hierboven, doe het gewoon.

select sum(SumGrouped) from 
(    select sum (rate) as 'SumGrouped'
    from yourTable
    group by first_name, last_name) T1

8
2017-08-02 17:03



David zei dat hij zijn antwoord als zodanig vond:

SELECT SUM(rate) FROM (SELECT * FROM records GROUP BY last_name, first_name) T1

Maar wanneer u de GROUP BY in de innerlijke query denk ik dat je geaggregeerde functies in je moet gebruiken SELECT. Dus ik denk dat het antwoord meer lijkt op:

SELECT SUM(rate) FROM (SELECT MAX(rate) AS rate FROM records GROUP BY last_name, first_name) T1

ik koos MAX() om slechts één "rate" te kiezen voor een "last_name, first_name" combinatie maar MIN() zou hetzelfde moeten werken, ervan uitgaande dat de "achternaam, eerste naam" ons altijd naar dezelfde "snelheid" leidt, zelfs wanneer het meerdere keren in de tabel gebeurt. Dit lijkt de oorspronkelijke veronderstelling van David te zijn - dat we voor een unieke naam maar één keer het tarief willen halen, omdat we weten dat het hetzelfde zal zijn.


6
2018-06-22 22:26



SELECT SUM(rate)
FROM [TABLE] 
GROUP BY first_name, last_name;

2
2017-08-02 17:12



SELECT SUM(rate)
FROM [TABLE] 
GROUP BY CONCAT_WS(' ', first_name, last_name);

1
2017-08-02 17:01



U kunt elk van de bovenstaande codevoorbeelden gebruiken die zijn verstrekt met group by-clausule zonder dat een aggregatiefunctie een onbepaald record voor elke groepsconditie retourneert. Je kunt doorverwijzen http://dev.mysql.com/doc/refman/5.5/en/group-by-hidden-columns.html link voor verder lezen.


0
2017-08-02 17:46