我有两张桌子:
use exercise;
create table Companies
(
ID int,
Name varchar(100),
City varchar(100),
c_size varchar(100),
PRIMARY KEY (ID)
);
insert into Companies(ID, Name, city, company_size)
values
(222, 'Karma LLC','CITY2', 'big'),
(223, 'Manny Ind.','CITY1', 'medium'),
(224, 'Random PLC','CITY1', 'medium'),
(225, 'Hijack LLC','CITY1', 'medium'),
(226, 'Travels LLC','CITY1', 'small'),
(227, 'Mirana Ind.','CITY2', 'small'),
(228, 'Polla Ind.','CITY3', 'small'),
(229, 'Americano LLC','CITY3', 'small'),
(230, 'Macaroni LLC','CITY4', 'small');
CREATE TABLE INVOICES
(
ID INT auto_increment,
`DATE` DATE,
Company INT,
Amount DECIMAL(7,2),
PRIMARY KEY (ID)
);
INSERT INTO INVOICES(`DATE`,Company,Amount)
VALUES
('2014-01-02', 222, 19500.00),
('2014-01-02', 222, 29205),
('2014-01-07', 222, 152.50),
('2014-01-07', 223, 6590),
('2014-01-07', 223, 4999),
('2014-01-09', 224, 720.60),
('2014-01-09', 225, 1100),
('2014-02-05', 226, 885),
('2014-02-05', 222, 9678.7);
我的任务很简单:编写查询,该查询返回由城市支付大部分发票的公司(按金额值)。
我觉得有必要使用JOIN
表的别名,或者类似的别名,但是我MySQL
对语言的这些方面还是很陌生。寻找好的教程/练习。
然后查询应返回类似以下内容的内容:
|---sum(amount)_for_city_which_paid_most---|---name_of_the_city---|
|------------------number------------------|---------city---------|
抱歉,ASCII,但是我觉得这是表达我的意思的清晰快捷的方法。
我还想知道查询,其中列出了city_name和该城市的公司支付的金额(类似于上述内容,但包括所有城市,而不仅仅是一个城市)。
对不起,英语不好:(
那么,这样的事情?
SELECT *,SUM(i.Amount) AS total_amount
FROM Companies c
JOIN INVOICES i ON c.ID=i.Company
GROUP BY c.City
ORDER BY total_amount desc
LIMIT 1
编辑:第二个不起作用,因为您想按城市分组,该城市仅存在于Company表中。
如果仅使用公司ID,则可以保存自己的联接:
SELECT i.Company,SUM(i.Amount) AS total_amount
FROM INVOICES i
GROUP BY i.Company
ORDER BY total_amount desc
LIMIT 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句