group by having ?
select 价格,count(*) 个数 from tablename where 价格>1000 group by 价格
select 价格,count(*) 个数 from tablename where 价格>1000 group by 价格
解决方案 »
- 求一SQL函数
- 小问题
- 新手请问:自定义存储过程和自定义函数到底有什么不同?
- 119---怎样管理操作系统的用户?
- 急:数据库错误:进程 90 发生了严重的异常 c0000005 EXCEPTION_ACCESS_VIOLATION
- 执行起来有什么区别?哪条更快?
- sql server初级问题!这个insert语句怎样写?
- 怎么样修改服务管理器名称?
- 一对多的重复。请教高手写这样Sql语句***是不是很难***
- 关于三层体系???问题多多!
- 如何把SELECT的结果导到一个已经存在的表中,select * into tblAA from ...好象还不太行
- 为什么sqlmangr.exe启动即消失。。。
2: eg:
select 价格,count(*) 个数 from tablename
where 价格 > 100
group by 价格 having count(*)>5
select sum(A) from mytable group by B
group by后面的条件一定是SELECT 所选择没有用集合函数的一项,例如上面的可以写成:
select B,sum(A) from mytable group by B
group by 字段1,字段2 having 字段4=值
select col1name,count(*) 个数
from t
where col2name='a'
group by col1name
having count(*)>5
order by col1name desc
HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。下面的查询得到本年度截止到目前的销售额超过 $40,000 的出版商:USE pubs
SELECT pub_id, total = SUM(ytd_sales)
FROM titles
GROUP BY pub_id
HAVING SUM(ytd_sales) > 40000下面是结果集:pub_id total
------ -----------
0877 44219 (1 row(s) affected)为了确保对每个出版商的计算中至少包含六本书,下面示例使用 HAVING COUNT(*) > 5 消除返回的总数小于六本书的出版商:USE pubs
SELECT pub_id, total = SUM(ytd_sales)
FROM titles
GROUP BY pub_id
HAVING COUNT(*) > 5下面是结果集:pub_id total
------ -----------
0877 44219
1389 24941 (2 row(s) affected)理解应用 WHERE、GROUP BY 和 HAVING 子句的正确序列对编写高效的查询代码会有所帮助: WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
GROUP BY 子句用来分组 WHERE 子句的输出。
HAVING 子句用来从分组的结果中筛选行。
对于可以在分组操作之前或之后应用的搜索条件,在 WHERE 子句中指定它们更有效。这样可以减少必须分组的行数。应当在 HAVING 子句中指定的搜索条件只是那些必须在执行分组操作之后应用的搜索条件。Microsoft® SQL Server™ 2000 查询优化器可处理这些条件中的大多数。如果查询优化器确定 HAVING 搜索条件可以在分组操作之前应用,那么它就会在分组之前应用。查询优化器可能无法识别所有可以在分组操作之前应用的 HAVING 搜索条件。建议将所有这些搜索条件放在 WHERE 子句中而不是 HAVING 子句中。以下查询显示包含聚合函数的 HAVING 子句。该子句按类型分组 titles 表中的行,并且消除只包含一本书的组:USE pubs
SELECT type
FROM titles
GROUP BY type
HAVING COUNT(*) > 1下面是结果集:type
------------------
business
mod_cook
popular_comp
psychology
trad_cook(5 row(s) affected)以下是没有聚合函数的 HAVING 子句的示例。该子句按类型分组 titles 表中的行,并且消除不是以字母 p 开头的那些类型。USE pubs
SELECT type
FROM titles
GROUP BY type
HAVING type LIKE 'p%'下面是结果集:type
------------------
popular_comp
psychology(2 row(s) affected)如果 HAVING 中包含多个条件,那么这些条件将通过 AND、OR 或 NOT 组合在一起。以下示例显示如何按出版商分组 titles,只包括那些标识号大于 0800、支付的总预付款已超过 $15,000 且销售书籍的平均价格小于 $20 的出版商。SELECT pub_id, SUM(advance) AS AmountAdvanced,
AVG(price) AS AveragePrice
FROM pubs.dbo.titles
WHERE pub_id > '0800'
GROUP BY pub_id
HAVING SUM(advance) > $15000
AND AVG(price) < $20ORDER BY 可以用来为 GROUP BY 子句的输出排序。下面的示例显示使用 ORDER BY 子句以定义返回 GROUP BY 子句中的行的顺序:SELECT pub_id, SUM(advance) AS AmountAdvanced,
AVG(price) AS AveragePrice
FROM pubs.dbo.titles
WHERE pub_id > '0800'
AND price >= $5
GROUP BY pub_id
HAVING SUM(advance) > $15000
AND AVG(price) < $20
ORDER BY pub_id DESC
还有一个问题请大师们帮忙,作一个查询能够统计当日登记人数,累计人数及尚余名额,谢谢
datediff(day , 报名日期 ,getdate()) 不對
應為datediff(d , 报名日期 ,getdate()) = 0select count(報名號) as 当日登记人数 from 报名表 where datediff(d , 报名日期 ,getdate()) = 0select count(報名號) as 累计到当日人数 from 报名表