若在括弧内只有一个值,COUNT等聚合函数运算后返

2019-11-26 17:50栏目:网络数据
TAG:

SQL 语句教程 Group By

SQL之Group by和Having

  在 SQL 中,在两个情况下会用到 IN 这个指令;这一页将介绍其中之一━━与 WHERE 有关的那一个情 况。在这个用法下,我们事先已知道至少一个我们需要的值,而我们将这些知道的值都放入 IN 这个子句。 IN 指令的语法为下:

我们现在回到函数上。记得我们用SUM这个指令来算出所有的 Sales 吧!如果我们的需求变成是要算出每一间店 的营业额 ,那怎么办呢?在这个情况下,我们要做到两件事:第一,我们对于 store_name 及 Sales 这两个栏位都要选出。第二,我们需要确认所有的 sales 都要依照各个 store_name 来分开算。这个语法为:SELECT "栏位1", SUM FROM "表格名" GROUP BY "栏位1"在我们的示范上Store_Information 表格

在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。

  SELECT "栏位名" FROM "表格名" WHERE "栏位名" IN ('值一', '值二', ...)

store_name

SELECT SUM(population) FROM bbc

  在括弧内可以有一或多个值,而不同值之间由逗点分开。值可以是数目或是文字。若在括弧内只有一个值, 那这个子句就等于

sales

  这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。

  WHERE "栏位名" = '值一'

date

  通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。当你指定 GROUP BY region 时, 属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值。

  举例来说,若我们要在 Store_Information 表格中找出所有含盖 Los Angeles 或 San Diego 的资料Store_Information 表格

Los Angeles

  HAVING子句可以让我们筛选成组后的各组数据,WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前.
而 HAVING子句在聚合后对组记录进行筛选。

  ---------------------------------------------------------------

$1500

  让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句,还采用第三节介绍的bbc表。

  store_name sales date

jan-05-1999

  SQL实例:

  Los Angeles $1500 jan-05-1999

San Francisco

  一、显示每个地区的总人口数和总面积:

  San Diego $250 jan-07-1999

$300

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region

  San Francisco $300 jan-08-1999

jan-08-1999

  先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。

  Boston $700 jan-08-1999

Boston

  二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。

  ---------------------------------------------------------------

$700

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area)>1000000

  我们就打入

jan-08-1999

  在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。

  SELECT * FROM Store_Information WHERE store_name IN ('Los Angeles', 'San Diego')

我们就打入SELECT store_name, SUM FROM Store_Information GROUP BY store_name结果 : store_name SUM Los Angeles $1800 San Diego $250 Boston $700 当我们选不只一个栏位,且其中至少一个栏位有包含函数的运用时,我们就需要用到 GROUP BY 这个指令。在这个情况下,我们需要确定我们有 GROUP BY 所有其他的栏位。换句话说,除了有包括函数的栏位外,我们都需要将其放在 GROUP BY 的子句中。SQL 语句教程 HAVING

  相反,HAVING子句可以让我们筛选成组后的各组数据.

  结果:

那我们如何对函数产生的值来设定条件呢?举例来说,我们可能只需要知道哪些店的营业额有超过 $1,500。在这个情况下,我们不能使用WHERE的指令。那要怎么办呢?很幸运地,SQL 有提供一个HAVING的指令,而我们就可以用这个指令来达到这个目标。HAVING子句通常是在一个 SQL 句子的最后。一个含有 HAVING 子句的 SQL 并不一定要包含GROUP BY子句。HAVING的语法如下:SELECT "栏位1", SUM FROM "表格名" GROUP BY "栏位1" HAVING 请读者注意: GROUP BY 子句并不是一定需要的。在我们Store_Information 表格这个例子中Store_Information 表格

GROUP BY 子句。HAVING 的语法如下:

  -----------------------------------------------------------------------------

store_name

SELECT "栏位1", SUM("栏位2")
FROM "表格名"
GROUP BY "栏位1"
HAVING (函数条件)

  store_name sales date

sales

请读者注意: GROUP BY 子句并不是一定需要的。

  Los Angeles $1500 jan-05-1999

date

在我们Store_Information 表格这个例子中,

  San Diego $250 jan-07-1999

Los Angeles

Store_Information 表格
store_name  Sales  Date 
Los Angeles  $1500  Jan-05-1999 
San Diego  $250  Jan-07-1999 
Los Angeles  $300  Jan-08-1999 
Boston  $700  Jan-08-1999 

  -----------------------------------------------------------------------------

$1500

 

jan-05-1999

我们打入,

San Francisco

SELECT store_name, SUM(sales)
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500

$300

结果:

jan-08-1999

store_name SUM(Sales)
Los Angeles $1800

Boston

在这一页中,我们列出所有在这个网站有列出 SQL 指令的语法。若要更详尽的说明,请点选指令名称。

$700

sql语法  

jan-08-1999

Select
SELECT "栏位" FROM "表格名"

我们打入SELECT store_name, SUM FROM Store_Information GROUP BY store_name HAVING SUM > 1500结果 : store_name SUM Los Angeles $1800

Distinct
SELECT DISTINCT "栏位"
FROM "表格名"

Where
SELECT "栏位"
FROM "表格名"
WHERE "condition"

And/Or
SELECT "栏位"
FROM "表格名"
WHERE "简单条件"
{[AND|OR] "简单条件"}+

In
SELECT "栏位"
FROM "表格名"
WHERE "栏位" IN ('值1', '值2', ...)

Between
SELECT "栏位"
FROM "表格名"
WHERE "栏位" BETWEEN '值1' AND '值2'

Like
SELECT "栏位"
FROM "表格名"
WHERE "栏位" LIKE {模式}

Order By
SELECT "栏位"
FROM "表格名"
[WHERE "条件"]
ORDER BY "栏位" [ASC, DESC]

Count
SELECT COUNT("栏位")
FROM "表格名"

Group By
SELECT "栏位1", SUM("栏位2")
FROM "表格名"
GROUP BY "栏位1"

Having
SELECT "栏位1", SUM("栏位2")
FROM "表格名"
GROUP BY "栏位1"
HAVING (栏位)

Create Table
CREATE TABLE "表格名"
("栏位 1" "栏位 1 资料种类",
"栏位 2" "栏位 2 资料种类",
... )

Drop Table
DROP TABLE "表格名"

Truncate Table
TRUNCATE TABLE "表格名"

Insert Into
INSERT INTO "表格名" ("栏位1", "栏位2", ...)
VALUES ("值1", "值2", ...)

Update
UPDATE "表格名"
SET "栏位1" = [新值]
WHERE {条件}

Delete From
DELETE FROM "表格名"
WHERE {条件}

by和Having 在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和...

版权声明:本文由大奖888-www.88pt88.com-大奖888官网登录发布于网络数据,转载请注明出处:若在括弧内只有一个值,COUNT等聚合函数运算后返