我正在研究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和类似此表的计费:
----------------------------------------
|Category_Name | Business_Name | Total |
|--------------+---------------+-------|
|Pub | Beer | 5 |
|--------------+---------------+--------
d)所有按城市计费的总计,显示:category_name,business_name,city_name和诸如此表的帐单
--------------------------
|City | Total |
|----------------+-------|
|Cairo | 0 |
|----------------+-------|
|New York | 10 |
|----------------+-------|
|Paris | 130 |
|----------------+-------|
|Tokio | 15 |
-----------------+--------
|Vancouver | 25 |
-----------------+--------
有更多知识可以帮助我的身体吗?=)
首先是第一件事,所有这些都是基本查询,我必须指出,简单的Google搜索教程(EX1,EX2,EX3)将回答其中的大多数。当我们在这里提供帮助和指导时,我希望您会牢记它并阅读教程。
可以说能够帮助您,我将浏览每个查询,并概述正在发生的事情。
a)您需要在此处进行汇总操作来总结这些值。您将使用总和关键词。通常,您需要一个组,但是在这种情况下,由于我们只有一个带有" Total"一词的硬编码列,因此不需要。我们还根据您的表格给每个列的别名。这是在列名之后。
select 'Total' as business_Name,
sum(billing) Total
from business
b)这几乎是A的精确副本,但需要进行分组。在这种情况下,您必须通过关键词使用该组,以适用于所有列中的所有列。在这种情况下,它只是类别名称。最好不要在clob和按语句中使用序列中的序列位置,您应该始终阐明在能够使用时使用的列。
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 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非常相似,但是我们使用City ID加入了City_name。
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的基础知识。
这是对查询之一的答案。但是我建议您阅读在线基本SQL教程,您将能够轻松地写它们。
b)
select c.category_name
,sum(billing)
from business b
join category c
on b.category = c.id
group by 1