sql select求和条件
sql select sum conditions
我正在学习 sql(自学),我想知道如何处理这些示例:
1- 我会在下面创建这 3 tables:
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) 所有商店的账单总价值(Billing),像这样table:
-----------------------
|Business_Name | Total |
|--------------+-------|
|Total | 180 |
------------------------
b) Category_Name 的所有总帐单如下 table:
-------------------
|Category | Total |
|---------+-------|
|Bar | 130 |
|---------+-------|
|Pub | 50 |
|---------+-------|
|Pizza | 5 |
----------+--------
c)列出具有最低计费的 Business_Name,显示:Category_Name、Business_Name 和这样的计费 table:
----------------------------------------
|Category_Name | Business_Name | Total |
|--------------+---------------+-------|
|Pub | Beer | 5 |
|--------------+---------------+--------
d) All Total of Billing by City,显示:Category_Name、Business_Name、City_Name 和 Billing like this table
--------------------------
|City | Total |
|----------------+-------|
|Cairo | 0 |
|----------------+-------|
|New York | 10 |
|----------------+-------|
|Paris | 130 |
|----------------+-------|
|Tokio | 15 |
-----------------+--------
|Vancouver | 25 |
-----------------+--------
有哪位知识渊博的人可以帮助我吗? =)
这是对其中一个问题的回答。但我建议您阅读在线基础 sql 教程,您将能够轻松地自己编写它们。
b)
select c.category_name
,sum(billing)
from business b
join category c
on b.category = c.id
group by 1
首先,所有这些都是基本查询,我必须指出,只需 google 搜索教程 (ex1, ex2, ex3) 就可以回答大部分问题。因为我们在这里提供帮助和指导,所以我希望您在查看答案之前牢记并阅读教程。
据说可以帮助您解决问题,我将遍历每个查询并提供正在发生的事情的概述。
a) 您需要在此处进行聚合操作来对值求和。您将使用 sum 关键字。通常你需要一个分组依据,但在这种情况下,因为我们只有一个硬编码列,其中包含单词 "Total",所以不需要。我们还根据您的 table 为每一列指定别名。这是在列名之后。
select 'Total' as business_Name,
sum(billing) Total
from business
b) 这个几乎是a的精确副本,但需要分组。在这种情况下,您必须对不在聚合中的所有列使用 group by 关键字。在这种情况下,它只是类别名称。最好不要在 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 语句中添加另一列,然后将一列添加到 group by 以允许分组。
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 非常相似,但我们使用城市 ID 连接城市而不是 category_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(自学),我想知道如何处理这些示例:
1- 我会在下面创建这 3 tables:
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) 所有商店的账单总价值(Billing),像这样table:
-----------------------
|Business_Name | Total |
|--------------+-------|
|Total | 180 |
------------------------
b) Category_Name 的所有总帐单如下 table:
-------------------
|Category | Total |
|---------+-------|
|Bar | 130 |
|---------+-------|
|Pub | 50 |
|---------+-------|
|Pizza | 5 |
----------+--------
c)列出具有最低计费的 Business_Name,显示:Category_Name、Business_Name 和这样的计费 table:
----------------------------------------
|Category_Name | Business_Name | Total |
|--------------+---------------+-------|
|Pub | Beer | 5 |
|--------------+---------------+--------
d) All Total of Billing by City,显示:Category_Name、Business_Name、City_Name 和 Billing like this table
--------------------------
|City | Total |
|----------------+-------|
|Cairo | 0 |
|----------------+-------|
|New York | 10 |
|----------------+-------|
|Paris | 130 |
|----------------+-------|
|Tokio | 15 |
-----------------+--------
|Vancouver | 25 |
-----------------+--------
有哪位知识渊博的人可以帮助我吗? =)
这是对其中一个问题的回答。但我建议您阅读在线基础 sql 教程,您将能够轻松地自己编写它们。
b)
select c.category_name
,sum(billing)
from business b
join category c
on b.category = c.id
group by 1
首先,所有这些都是基本查询,我必须指出,只需 google 搜索教程 (ex1, ex2, ex3) 就可以回答大部分问题。因为我们在这里提供帮助和指导,所以我希望您在查看答案之前牢记并阅读教程。
据说可以帮助您解决问题,我将遍历每个查询并提供正在发生的事情的概述。
a) 您需要在此处进行聚合操作来对值求和。您将使用 sum 关键字。通常你需要一个分组依据,但在这种情况下,因为我们只有一个硬编码列,其中包含单词 "Total",所以不需要。我们还根据您的 table 为每一列指定别名。这是在列名之后。
select 'Total' as business_Name,
sum(billing) Total
from business
b) 这个几乎是a的精确副本,但需要分组。在这种情况下,您必须对不在聚合中的所有列使用 group by 关键字。在这种情况下,它只是类别名称。最好不要在 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 语句中添加另一列,然后将一列添加到 group by 以允许分组。
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 非常相似,但我们使用城市 ID 连接城市而不是 category_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 的基础知识。