Discussions
Categories
- 197.1K All Categories
- 2.5K Data
- 546 Big Data Appliance
- 1.9K Data Science
- 450.7K Databases
- 221.9K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 552 MySQL Community Space
- 479 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3.1K ORDS, SODA & JSON in the Database
- 555 SQLcl
- 4K SQL Developer Data Modeler
- 187.2K SQL & PL/SQL
- 21.3K SQL Developer
- 296.3K Development
- 17 Developer Projects
- 139 Programming Languages
- 293K Development Tools
- 110 DevOps
- 3.1K QA/Testing
- 646.1K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 158 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.2K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 19 Java Essentials
- 162 Java 8 Questions
- 86K Java Programming
- 81 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 204 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 466 LiveLabs
- 39 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 175 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 233 Portuguese
Aggregating rows to form a report

Hello Experts,
How can I aggregate this CUSTOMERS table data using SQL code:
CustomerName CustomerID Amount Maria 101 25 Maria 101 35 Maria 101 45 John 202 10 John 202 10 John 202 10 James 303 70
To make it look like this:
CustomerName CustomerID Amount Maria 101 105 John 202 30 James 303 70
Best Answers
-
Hey there! Try this one:
SQL> select customername, min(CUSTOMERID), sum(amount) 2 from customers 3 group by CUSTOMERNAME; CUSTOMERNAME MIN(CUSTOMERID) SUM(AMOUNT) ------------------------------ --------------- ----------- Maria 101 105 James 303 70 John 202 30
-
It would probably be better grouping on customerid instead of name, just in case there is more than 1 customer with the same name.
select max(customername) as customername ,customerid ,sum(amount) as amount from customers group by customerid;
-
Hi, @The_Cute_DBA
Or you could group by both:
SELECT customername, customerid , SUM (amount) AS total_amount FROM customers GROUP BY customername, customerid ORDER BY customername, customerid -- or whatever you want ;
All three solutions get the same results with the sample data you posted. All three solutions could give different results with different data.
Answers
-
Hey there! Try this one:
SQL> select customername, min(CUSTOMERID), sum(amount) 2 from customers 3 group by CUSTOMERNAME; CUSTOMERNAME MIN(CUSTOMERID) SUM(AMOUNT) ------------------------------ --------------- ----------- Maria 101 105 James 303 70 John 202 30
-
It would probably be better grouping on customerid instead of name, just in case there is more than 1 customer with the same name.
select max(customername) as customername ,customerid ,sum(amount) as amount from customers group by customerid;
-
Hi, @The_Cute_DBA
Or you could group by both:
SELECT customername, customerid , SUM (amount) AS total_amount FROM customers GROUP BY customername, customerid ORDER BY customername, customerid -- or whatever you want ;
All three solutions get the same results with the sample data you posted. All three solutions could give different results with different data.
-
Thank you guys. This is very helpful.