Select customerNumber from Payments
where Amount = (Select Sum(amount) from products order by customerNumber)
Here, customer number is repeating. So, I have calculate the sum than the highest amount but in my query I am not getting the result.
'''
CREATE TABLE payments (
customerNumber int(11) NOT NULL,
checkNumber varchar(50) NOT NULL,
paymentDate date NOT NULL,
amount decimal(10,2) NOT NULL,
PRIMARY KEY (customerNumber,checkNumber),
CONSTRAINT payments_ibfk_1 FOREIGN KEY (customerNumber) REFERENCES customers (customerNumber)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*Data for the table payments */
insert into payments(customerNumber,checkNumber,paymentDate,amount) values
(103,'HQ336336','2004-10-19','6066.78'),
(103,'JM555205','2003-06-05','14571.44'),
(103,'OM314933','2004-12-18','1676.14'),
(112,'BO864823','2004-12-17','14191.12'),
(112,'HQ55022','2003-06-06','32641.98'),
(112,'ND748579','2004-08-20','33347.88'),
(114,'GG31455','2003-05-20','45864.03'),
(114,'MA765515','2004-12-15','82261.22'),
(114,'NP603840','2003-05-31','7565.08'),
(114,'NR27552','2004-03-10','44894.74'),
(119,'DB933704','2004-11-14','19501.82'),
(119,'LN373447','2004-08-08','47924.19'),
(119,'NG94694','2005-02-22','49523.67'),
(121,'DB889831','2003-02-16','50218.95'),
(121,'FD317790','2003-10-28','1491.38'),
(121,'KI831359','2004-11-04','17876.32'),
(121,'MA302151','2004-11-28','34638.14'),
(124,'AE215433','2005-03-05','101244.59'),
(124,'BG255406','2004-08-28','85410.87'),
(124,'CQ287967','2003-04-11','11044.30'),
(124,'ET64396','2005-04-16','83598.04'),
(124,'HI366474','2004-12-27','47142.70'),
(124,'HR86578','2004-11-02','55639.66'),
(124,'KI131716','2003-08-15','111654.40'),
(124,'LF217299','2004-03-26','43369.30'),
(124,'NT141748','2003-11-25','45084.38'),
(128,'DI925118','2003-01-28','10549.01'),
(128,'FA465482','2003-10-18','24101.81'),
(128,'FH668230','2004-03-24','33820.62'),
(128,'IP383901','2004-11-18','7466.32'),
(129,'DM826140','2004-12-08','26248.78'),
(129,'ID449593','2003-12-11','23923.93'),
(129,'PI42991','2003-04-09','16537.85'),
(131,'CL442705','2003-03-12','22292.62'),
(131,'MA724562','2004-12-02','50025.35');
CodePudding user response:
Using a LIMIT query we can try:
SELECT customerNumber
FROM Payments
GROUP BY customerNumber
ORDER BY SUM(amount) DESC
LIMIT 1;
If you need to cater to the possibility of there being more than one customer tied for the highest total, then we can either use a subquery or the RANK analytic function. Using the former:
SELECT customerNumber
FROM Payments
GROUP BY customerNumber
HAVING SUM(amount) = (SELECT SUM(amount) FROM Payments GROUP BY customerNumber
ORDER BY 1 DESC LIMIT 1);
