sqlhavingnot
⑴ sql的SELECT语句中,“HAVING<条件表达式>”用来筛选满足条件的呢
HAVING
子句
在
SQL
中增加
HAVING
子句原因是,WHERE
关键字无法与合计函数一起使用。
SQL
HAVING
语法SELECT
column_name,
aggregate_function(column_name)
FROM
table_name
WHERE
column_name
operator
value
GROUP
BY
column_name
HAVING
aggregate_function(column_name)
operator
value
HAVING
对由sum或其它集合函数运算结果的输出进行限制。
比如,我们可能只希望看到Store_Information数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使用HAVING从句。
我们可以使用如下命令实现上述查询目的:
SELECT
store_name,
SUM(sales)
FROM
Store_Information
GROUP
BY
store_name
HAVING
SUM(sales)
>
1500
查询结果显示为:
store_name
SUM(Sales)
Los
Angeles
$1800
注:SQL语言中设定集合函数的查询条件时使用HAVING从句而不是WHERE从句。通常情况下,HAVING从句被放置在SQL命令的结尾处。
⑵ 请问SQL语句中go有什么作用
如果只是执行一条语句,有没有go都一样
如果多条语句之间用go分隔开就不一样了
每个被go分隔的语句都是一个单独的事务,一个语句执行失败不会影响其它语句执行。
例如:
首先同时执行下边的语句
select
*
from
sysobjects
where
id=a
select
getdate()
你会发现会报错,并且不会显示任何结果集
而你再执行
select
*
from
sysobjects
where
id=a
go
select
getdate()
go
你会发现尽管同样会报错,但结果集中包含select
getdate()的结果。
⑶ oracle 中 having 后面可以用and 么
1 having后可以接and
SQL> select deptno from emp group by deptno having deptno=10 and deptno>1;
DEPTNO
----------
10
2 SQL分组前可以使用where,SQL分组后只能用having筛选条件,即:出现group by分组,必须用having才能筛选
SQL> select deptno from emp where sal>100 group by deptno;
DEPTNO
----------
30
20
10
SQL> select deptno from emp group by deptno where sal>100;
select deptno from emp group by deptno where sal>100
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
SQL> select deptno from emp group by deptno where deptno>1;
select deptno from emp group by deptno where deptno>1
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
SQL> select deptno from emp group by deptno having deptno>1;
DEPTNO
----------
30
20
10
⑷ mysql sql语句group by和having的执行顺序是怎样的
(1)一般而言在group by语句中,的结果显示只能是分组字段,如果有其他字段那么必须是带有聚合函数的,比如count,sum,max,min等,但是这里直接放个*就可以执行了?
(2)如果是在group by之前筛选,那么怎么count,是选择oid=5的进行count么?如果不进行分组,数据库怎么能够知道按照什么规则进行count.
个人建议,这样
select cuid,count(oid) from orders
group by cuid
having count(oid)=5
和
select cuid,count(oid) from orders
group by cuid
对比一下,我忘了mysql有没有minus
如果有的话,
select cuid,count(oid) from orders group by cuid
minus
select cuid,count(oid) from orders group by cuid having count(oid)=5
就应该能看出来了。
⑸ sql语句中where和having的区别
Where 是一个约束声明,使用Where约束来自数据库的数据,Where是在结果返回之前起作用的,Where中不能使用聚合函数。
Having是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。
在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行。而where子句在查询过程中执行优先级高于聚合语句。
下面用一个例子进一步说明问题。假设有数据表:
[sql] view plain
CREATE TABLE `test`.`salary_info` (
`id` int(10) unsigned NOT NULL auto_increment,
`deparment` varchar(16) NOT NULL default '',
`name` varchar(16) NOT NULL default '',
`salary` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
⑹ sql里的having什么意思 比如说having count(学号)
对由sum、count或其它集合函数运算结果的输出进行限制
havingcount(学号)指的是 学生数目( 大于等于)数值
createTABLETable1
(
IDintidentity(1,1)primarykeyNOTNULL,
classidint,
sexvarchar(10),
ageint,
)
--添加测试数据
InsertintoTable1values(1,'男',20)
InsertintoTable1values(2,'女',22)
InsertintoTable1values(3,'男',23)
InsertintoTable1values(4,'男',22)
InsertintoTable1values(1,'男',24)
InsertintoTable1values(2,'女',19)
InsertintoTable1values(4,'男',26)
InsertintoTable1values(1,'男',24)
InsertintoTable1values(1,'男',20)
InsertintoTable1values(2,'女',22)
InsertintoTable1values(3,'男',23)
InsertintoTable1values(4,'男',22)
InsertintoTable1values(1,'男',24)
InsertintoTable1values(2,'女',19
--举例子说明:查询table表查询每一个班级中年龄大于20,性别为男的人数
selectCOUNT(*)as'>20岁人数',classidfromTable1wheresex='男'groupbyclassid,agehavingage>20
--若要确保对每种产品的计算中至少包含1500项,请使用HAVINGCOUNT(*)>1500消除返--回的销售总数小于1500项的产品。该查询类似于下面的示例:
SELECTProctID,SUM(LineTotal)ASTotal
FROMSales.SalesOrderDetail
GROUPBYProctID
HAVINGCOUNT(*)>1500;
⑺ SQL HAVING 问题
having称为分组滤过条件,也就是说是分组需要的条件,所以必须与group by联用.
select 学号 from 表s where 成绩>80 group by 学号 having count(学号)>2
也就是说只有超过两门且不包含两门的,每门成绩都在80以上且不包含80的学生的学号.
////////////////////////////////////////////////////////////////////////////
忘记了,我求的是两门合格的同学,晕!
后边加一个条件吧,用not exists或是not in都是可以了!
select 学号 from 表s where 成绩>80 and not exists(select 学号 from 表s where 成绩<=80)group by 学号 having count(学号)>2
select 学号 from 表s where 成绩>80 and 学号 not in (select 学号 from 表s where 成绩<=80) group by 学号 having count(学号)>2
⑻ sql group by having
对函数产生的值来设定条件时 我们会用到你说的 group by 和 having举例来说,我们可能只需要知道哪些店的营业额有超过 1,500元。在这个情况下,我们不能使用 WHERE 的指令。那要怎么办呢?很幸运地,SQL 有提供一个 HAVING 的指令,而我们就可以用这个指令来达到这个目标。 HAVING 子句通常是在一个 SQL 句子的最后。一个含有 HAVING 子句的 SQL 并不一定要包含 GROUP BY 子句。HAVING 的语法如下: SELECT "栏位1", SUM("栏位2") FROM "表格名" GROUP BY "栏位1" HAVING (函数条件) 请注意: GROUP BY 子句并不是一定需要的。 在我们Store_Information 表格这个例子中, 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
我们打入,再执行
SELECT store_name, SUM(sales) FROM Store_Information GROUP BY store_name
HAVING SUM(sales) > 1500 结果为: store_nameSUM(Sales) Los Angeles1800 好了,用法就是这样,group by 和 having 都用到了!很简单吧!!