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 的基础知识。