sql select sum条件

时间:2017-09-08 23:48:08

标签: sql oracle-sqldeveloper

我正在学习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    |
-----------------+--------

任何有更多知识可以帮助我的身体,好吗? =)

2 个答案:

答案 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)

首先,所有这些都是基本查询,我必须指出,一个简单的谷歌搜索教程(ex1ex2ex3)会回答最多这些。因为我们在这里提供帮助和指导,所以我希望你在仔细阅读教程之前先阅读教程。

据说能够帮助你,我将逐步完成每个查询,并提供正在发生的事情的概述。

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