标签: having-clause

SQL中WHERE和HAVING的区别

可能重复:
SQL:HAVING和WHERE有什么区别?

我见过各种关于WHERE和的讨论HAVING.我仍然有一个问题:HAVING仅在考虑聚合时使用,或者可以用于更一般的术语:每当您在查询中创建或别名字段时?我知道WHERE应该尽可能使用.

sql group-by where having having-clause

5
推荐指数
3
解决办法
3万
查看次数

MySQL Query中的HAVING和WHERE有什么区别?

我有一个viewX基于一些表的连接的view():

当我使用时WHERE,查询被延迟,处理器使用率达到50%,最后我需要关闭mysqld.exe服务并重新启动以尝试再次解决问题.

当我使用时HAVING,查询执行完美而快速,我得到结果,一切准备就绪.

该查询与此类似:

SELECT * FROM viewX WHERE column_of_view = 'foo'

SELECT * FROM viewX HAVING column_of_view = 'foo'
Run Code Online (Sandbox Code Playgroud)

怎么了?

我找到的解决方案是做这样的事情:

SELECT * FROM (SELECT * FROM viewX) as T WHERE column_of_view = 'foo'

SELECT * FROM (SELECT * FROM viewX) as T HAVING column_of_view = 'foo'
Run Code Online (Sandbox Code Playgroud)

两种查询工作都很精细,但我觉得这很糟糕!(SELECT*FROM(... viewX)????)

mysql select where-clause having-clause

5
推荐指数
1
解决办法
2969
查看次数

Oracle SQL - 有一个标准的每个变通方法吗?

我无法找到解决Oracle缺乏对HAVING EVERY子句的支持的方法.

我有两个表,生产和电影,具有以下架构:

Production (pid, mid)
Movie(mid, director)
Run Code Online (Sandbox Code Playgroud)

其中'pid'是表示发布者ID的整数,'mid'是表示电影ID的整数,director是电影导演的名称.

我的目标是获得一份出版商名单(按ID),这些出版商只发行由Peter Jackson或Ben Affleck执导的电影.

为了实现这一点,我写了以下查询:

SELECT *
    FROM Production P, Movie M
    WHERE P.mid = M.mid;
    GROUP BY P.pid
    HAVING EVERY ( M.director IN ('Ben Affleck', 'Peter Jackson') );
Run Code Online (Sandbox Code Playgroud)

但由于Oracle不支持HAVING EVERY,所以我得到的是以下错误:

    HAVING EVERY ( M.director IN ('ben affleck', 'PJ') )
                          *
ERROR at line 5:
ORA-00907: missing right parenthesis
Run Code Online (Sandbox Code Playgroud)

由于董事职位必须适用于出版商制作的每部电影,我不相信条件可以转移到WHERE子句.

这条路障有什么办法吗?任何被认为是"标准"的东西?另外(也许更重要的是)为什么Oracle选择不实施HAVING EVERY?

sql oracle sqlplus having-clause

5
推荐指数
1
解决办法
1953
查看次数

HAVING子句如何真正起作用?

我们能够在SQL查询中使用HAVING子句来过滤行组.当我们使用GROUP BY子句时,它以这种方式直接工作.

但是,让我们看看这个查询:

select 1 where 1!=1 having count(*)=0;
Run Code Online (Sandbox Code Playgroud)

(或者为Oracle添加'from dual').

如果HAVING真的进行了组过滤,那么在WHERE之后我们没有任何行,所以我们没有任何组,结果必须是'No row selected'.

但是在PostgreSQL,MySQL和Oracle中,我们得到'1'作为查询的结果.

问题:HAVING如何真正起作用?

SQL小提琴测试:http://www.sqlfiddle.com/#!15/d5407/51

mysql sql oracle postgresql having-clause

5
推荐指数
1
解决办法
162
查看次数

SQL选择计数(person_id)> 3来自

有人可以把这个英文翻译成SQL我已经尝试了几件但没有运气.

SELECT CASE FOR COUNT(person_id)> 3 THEN person_id end FROM table

我试图只在表中获得> 3次出现的person_id.

sql database aggregate-functions having-clause

4
推荐指数
1
解决办法
2745
查看次数

SQL中HAVING和WHERE子句的区别

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
Run Code Online (Sandbox Code Playgroud)

拥有和在哪里有什么区别

sql where-clause having-clause

4
推荐指数
2
解决办法
1万
查看次数

在Oracle SQL中找不到唯一的行

我有一个看似简单的问题,但我无法弄明白.

我有以下几点:

   Name Zipcode

    ER 5354
    OL 1234
    AS 1234
    BH 3453
    BH 3453
    HZ 1234
Run Code Online (Sandbox Code Playgroud)

我想找到那些ID没有明确定义一行的行.

所以我想在这里看到:

   OL 1234
   AS 1234
   HZ 1234
Run Code Online (Sandbox Code Playgroud)

或者只是简单的邮政编码.

对不起,我忘了提到一个重要的部分.如果名称相同则不是问题,只有同一个邮政编码有不同的名称. 所以这意味着:BH 3453不归

sql oracle having-clause

4
推荐指数
1
解决办法
9418
查看次数

我可以在SQL查询中使用HAVING而不是WHERE吗?

我一直以为我不能,但MSDN说不然.

不使用GROUP BY时,HAVING的行为类似于WHERE子句.

我检查过并得到错误:

消息8121:
列'...'在HAVING子句中无效,因为它不包含在聚合函数或GROUP BY中.

那么,它是什么?文档中的错误或鲜为人知的细节?

这可能是Sybase SQL Server中可用的功能之一.现在微软重写SQL Server更接近ANSI标准,但忘了修复文档.

是这样的吗?

sql-server having-clause

4
推荐指数
1
解决办法
1236
查看次数

LINQ with Group By和Min子句(字符串)

分组的例子- 在网上有计数选择linq的最小日期,但我找不到我的问题的特定解决方案.而且我也没有先进的linq理解来结合我迄今为止发现的这些解决方案.

我有这样的SQL查询:

select client_id 
from my_table /* Column1 : client_id, Column2 : _month */
group by client_id
having min(_month) = '2009-11'
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何将此查询转换为c#linq?.到目前为止,我写了类似的东西,但它没有给出我必须拥有的东西:

var query = dataTable.AsEnumerable() // This is my_table
  .GroupBy(c => c.Field<Int32>("client_id"))
  .Select(g => new
  {
      g.Key,
      minMonth = g.Min(c => c.Field<string>("_month"))
  })
  .Where(d => d.minMonth == "Some String like '2009-11'");   
Run Code Online (Sandbox Code Playgroud)

它实际上给了我这个SQL的结果,我不需要:

select client_id, min(_month) 
from my_table 
where _month = '2009-11' 
group by client_id
Run Code Online (Sandbox Code Playgroud)

注意:_month是一个格式为YYYY-MM的字符串.

c# sql linq having-clause sql-to-linq-conversion

3
推荐指数
1
解决办法
1万
查看次数

如何在SQL Server表中获取具有最大值的所有记录

MigratoryBirds在SQL Server表中的数据下面

birdType
1
4
4
4
5
5
5
3
Run Code Online (Sandbox Code Playgroud)

用于创建上表的SQL脚本:

/****** Object:  Table [dbo].[migratoryBirds]    Script Date: 20-Jul-17 8:01:02 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[migratoryBirds](
    [birdType] [int] NULL
) ON [PRIMARY]

GO
Run Code Online (Sandbox Code Playgroud)

我的目标是获得表中频率最高的鸟类.如果我编写存储过程并可以自由编写多个SQL查询,那么这并不困难,但我正在尝试使用单个SQL查询来实现它.我试图看看HavingSQL服务器的子句是否对我有任何帮助.

所以我写的第一个查询是:

select birdType, count(1) AS [birdCount]
from migratorybirds
group by birdType
Run Code Online (Sandbox Code Playgroud)

它给出了以下输出

birdType birdCount
1        1
3        1
4        3
5        3
Run Code Online (Sandbox Code Playgroud)

由于这是一个聚合的情况,所以我认为Having条款可以帮助我在这里筛选出频率最高的记录3.birdType4和5具有最高频率3.

所以,我增强了我的查询,如下所示:

select birdType, count(1) AS [birdCount] …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server having having-clause

2
推荐指数
1
解决办法
74
查看次数