我正在学习sql(由我自己),我想知道如何为这些例子做些什么:
1-我在下面创建这3个表:
CREATE TABLE Business (
Id INT,
Category INT,
Business_Name VARCHAR(30),
City_Id INT,
Billing INT
);
INSERT INTO business (Id, Category, Business_Name, City_Id, Billing) VALUES(1, 1, 'Bread', 1, 50);
INSERT INTO business (Id, Category, Business_Name, City_Id, Billing) VALUES(2, 2, 'Oreo', 2, 10);
INSERT INTO business (Id, Category, Business_Name, City_Id, Billing) VALUES(3, 2, 'Pizza', 3, 15);
INSERT INTO business (Id, Category, Business_Name, City_Id, Billing) VALUES(4, 2, 'Beer', 4, 25);
INSERT INTO business (Id, Category, Business_Name, City_Id, Billing) VALUES(5, 1, 'Steak', 1, 80);
CREATE TABLE City (
Id INT,
City_Name VARCHAR(30)
);
INSERT INTO City (Id, City_Name) VALUES(1, 'Paris');
INSERT INTO City (Id, City_Name) VALUES(2, 'New York');
INSERT INTO City (Id, City_Name) VALUES(3, 'Tokio');
INSERT INTO City (Id, City_Name) VALUES(4, 'Vancouver');
INSERT INTO City (Id, City_Name) VALUES(5, 'Cairo');
CREATE TABLE Category (
Id INT,
Category_Name VARCHAR(30)
);
INSERT INTO Category (Id, Category_Name) VALUES(1, 'Bar');
INSERT INTO Category (Id, Category_Name) VALUES(2, 'Pub');
INSERT INTO Category (Id, Category_Name) VALUES(3, 'Pizza');
2-我想进行这些SQL查询:
a)结算(计费)所有商店的总价值,如下表所示:
-----------------------
|Business_Name | Total |
|--------------+-------|
|Total | 180 |
------------------------
b)所有类别名称的总计费,如下表所示:
-------------------
|Category | Total |
|---------+-------|
|Bar | 130 |
|---------+-------|
|Pub | 50 |
|---------+-------|
|Pizza | 5 |
----------+--------
c)列出具有最小结算的Business_Name,显示:Category_Name,Business_Name和Billing,如下表所示:
----------------------------------------
|Category_Name | Business_Name | Total |
|--------------+---------------+-------|
|Pub | Beer | 5 |
|--------------+---------------+--------
d)按城市计算的所有结算总额,显示:Category_Name,Business_Name,City_Name和Billing,如此表
--------------------------
|City | Total |
|----------------+-------|
|Cairo | 0 |
|----------------+-------|
|New York | 10 |
|----------------+-------|
|Paris | 130 |
|----------------+-------|
|Tokio | 15 |
-----------------+--------
|Vancouver | 25 |
-----------------+--------
任何有更多知识可以帮助我的身体,好吗? =)
答案 0 :(得分:0)
以下是其中一个查询的答案。但我建议你阅读在线基础的sql教程,你就可以轻松地自己编写。
b)
select c.category_name
,sum(billing)
from business b
join category c
on b.category = c.id
group by 1
答案 1 :(得分:0)
首先,所有这些都是基本查询,我必须指出,一个简单的谷歌搜索教程(ex1,ex2,ex3)会回答最多这些。因为我们在这里提供帮助和指导,所以我希望你在仔细阅读教程之前先阅读教程。
据说能够帮助你,我将逐步完成每个查询,并提供正在发生的事情的概述。
a)这里需要一个聚合操作来总结这些值。您将使用总和关键字。通常你需要一个分组,但在这种情况下,因为我们只有一个带有“Total”字样的硬编码列,所以它不是必需的。我们还根据您的表为每个列提供别名。这是在列名之后。
select 'Total' as business_Name,
sum(billing) Total
from business
b)这个几乎是a的精确副本,但需要分组。在这种情况下,您必须按关键字分组使用不在聚合中的所有列。在这种情况下,它只是类别名称。最好不要在group by和order by语句中使用序号位置,你应该总是拼出你正在使用的列。
select c.category_name,
sum(billing) total
from business b
inner join category c
on b.category = c.id
group by c.category_name
c)我们继续构建查询并在select语句中添加另一列,然后向该组添加一列以允许分组。
select c.category_name,
b.business_name,
sum(billing) total
from business b
inner join category c
on b.category = c.id
group by c.category_name, b.business_name
d)对于此查询,它与b非常相似,但我们不是使用category_name,而是使用城市ID在城市上进行连接。
select c.city_name
,sum(billing) as total
from business b
inner join city c on c.id = b.city_id
group by c.city_name
所有这些说法,你的几个例子与你的预期输出不符。但这些查询确实将预期输出与您提供的数据相匹配。
我确实建议您阅读一些教程,以便更好地掌握sql的基础知识。