草庐IT

MySQL Group By 和 HAVING

coder 2023-10-03 原文

我是一个 MySQL 查询新手,所以我确信这是一个有明显答案的问题。

但是,我正在查看这两个查询。他们会返回不同的结果集吗?我知道排序过程会以不同的方式开始,但我相信它们会返回相同的结果,但第一个查询的效率会稍微高一些?

查询 1:HAVING,然后 AND

SELECT user_id   
FROM forum_posts  
GROUP BY user_id 
    HAVING COUNT(id) >= 100   
    AND user_id NOT IN (SELECT user_id FROM banned_users)

查询 2:WHERE,然后 HAVING

SELECT user_id   
FROM forum_posts 
WHERE user_id NOT IN(SELECT user_id FROM banned_users) 
GROUP BY user_id 
    HAVING COUNT(id) >= 100   

最佳答案

实际上,第一个查询的效率会较低(HAVINGWHERE 之后应用)。
更新

一些伪代码来说明您的查询是如何执行的([非常]简化版本)。
第一次查询:
1. SELECT user_id FROM forum_posts
2. SELECT user_id FROM banned_user
3.分组、计数等
4. 如果记录出现在第二个结果集中,则从第一个结果集中排除记录

第二次查询
1. SELECT user_id FROM forum_posts
2. SELECT user_id FROM banned_user
3. 如果记录出现在第二个结果集中,则从第一个结果集中排除记录
4.分组、计数等

步骤1,2的顺序并不重要,mysql可以选择自己认为好的。重要的区别在于步骤 3,4。在 GROUP BY 之后应用 Having。分组通常比连接更昂贵(在这种情况下可以将排除记录视为连接操作),因此需要分组的记录越少,性能越好。

关于MySQL Group By 和 HAVING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6457523/

有关MySQL Group By 和 HAVING的更多相关文章

  1. ruby /萨翁 : Having trouble with namespace for a soap request - 2

    我在更改正在构建的SOAPxml的命名空间时遇到问题。我不确定如何将“xmlns:env=”更改为“xmlns:soapenv=”,将“xmlns:tns=”更改为“xmlns:web=”我要构建的内容:100degreeCelsiusdegreeFahrenheit我目前得到的100degreeCelsiusdegreeFahrenheit我的代码:client=Savon.client(wsdl:"http://www.webservicex.net/ConvertTemperature.asmx?WSDL")message={temperature:'100',FromUnit:

  2. Golang 部门 : having multiple binaries in one source tree - 2

    具有以下Go项目布局,在lib中具有共享库函数,在cmd中具有多个二进制文件,使用这些库函数并具有外部依赖性:root|libcmd|binary1|main.gobinary2|main.go...使用dep工具寻找一种处理项目依赖关系的简单方法。预期的使用模式是什么:在每个binaryX目录中有多个Gopkg.*文件或使用一对Gopkg.toml和所有这些二进制文件的Gopkg.lock文件?在第二种情况下,如果我们知道vendor目录将位于项目根目录而不是binaryX目录中,我们将如何编译这些二进制文件? 最佳答案 通常,您

  3. unit-testing - 如何编写When a function having the parameters of c *gin.Context 的测试用例 - 2

    我正在用golang为我的项目编写Controller的测试用例。在Controller中有函数名称SaveProvider()有参数c*gin.Context我不知道如何将JSON传递给c*gin.Context这个参数以及我如何测试我在Controller中使用的函数谁能告诉我这段代码中的问题是什么。它也称为表驱动测试。packagecontrollersimport("bkapiv1/models""fmt""testing""github.com/gin-gonic/gin")funcTestSaveProvider(t*testing.T){typeargsstruct{c*

  4. java - 简单的 XML 框架 : Having an "inline like" behaviour for objects in ElementMap - 2

    我正在尝试在Android上序列化自定义对象的Hashmap以获得如下xml:foobar01/01/20004376484barfoo02/02/20004376484我创建了一个只包含我感兴趣的Hashmap的内部类,因为我无法按原样序列化它(并且读到这是不可能的)添加了一个对象来测试这样listEval.put(0,currentEvaluation).下面是内部类:@Root(name="ROWSET")publicstaticclasslistOfEvals{@ElementMap(entry="ROW",key="num",attribute=true,inline=tru

  5. windows - Qt build with opengl=angle fix support for Windows clients not having opengl 2.0 support? - 2

    我们使用来自Python绑定(bind)的QtWebEngine构建客户端。不幸的是,此客户端在某些不支持nativeOpenGL2.0的Windows系统上崩溃(请参阅下面的调试)。如果我设法在Windows上使用opengl=angle编译qt,这是否可行?或者这是一条死路?我已经花了一整天的时间尝试使用msys2/mingw64在Windows上从源代码编译qt,但从一个陷阱掉入另一个陷阱但没有成功,我想确保这项努力有成功的机会......谢谢!P.S.:我也在Qtforum发帖了qt.qpa.gl:BasicwglCreateContextgivesversion1.1qt.q

  6. windows - 命令提示符 : Execute Commands from Any Text File (Not Having ".bat" or ".cmd" Extensions) - 2

    我找不到任何方法来做,例如:cmd.exe/C"script.txt"换句话说,如果文件包含有效的批处理脚本,我需要命令提示符(尝试)执行具有任何扩展名(不一定是.bat或.cmd)的文件代码。我正在寻找类似于Unixshell的行为:./script.txt虽然在Unix上shebang(#!/bin/sh)负责理解文件实际上是一个脚本,但在Windows上似乎是.bat或.cmd扩展名起着同样的作用,表示命令提示符的批处理脚本文件。是否可以避免这种情况并强制命令提示符解释任何名称的文件?注意:请不要回答:Giveyourfile.bator.cmdextension.这不是问题所在

  7. c# - 内存溢出 : Having an increasing number of Microsoft. CSharp.RuntimeBinder.Semantics - 2

    我们目前正在我们的应用程序中寻找一些内存泄漏,当执行一些操作(在我们的应用程序中加载和关闭一个项目)时,我们知道内存总是增加一点点。我们已经找到了很多,但现在,增加最多的10个类是(根据我们的工具ANTSMemoryProfiler8.2):Microsoft.CSharp.RuntimeBinder.Semantics.SYMTBL+KeyMicrosoft.CSharp.RuntimeBinder.Semantics.LocalVariableSymbolMicrosoft.CSharp.RuntimeBinder.Semantics.CONSTVALMicrosoft.CShar

  8. java - 发电机数据库 : Delete all items having same Hash Key - 2

    考虑下表:Table(documentId:HashKey,userId:RangeKey)我如何编写代码来删除具有相同documentId的所有项目,并且最好不检索这些项目。 最佳答案 目前,您不能仅通过传递Hash键来删除所有项目,要删除一个项目,它需要Hash+Range,因为这就是它的唯一性。Youhavetoknowbothyour(hash+range)todeletetheitem.编辑:这是来自DynamoDB文档的引用链接http://docs.aws.amazon.com/amazondynamodb/lates

  9. c# - Linq To SQL 和 Having - 2

    我是LinqToSQL的新手,但我试图运行一个应该相当简单的SQL查询,但无法弄清楚如何让它在LINQ中发挥良好的作用。SELECTUsers.Id,Users.IdASExpr1,Users.FirstName,Users.LastName,User_x_Territory.UserIDFROMUsersLEFTOUTERJOINUser_x_TerritoryONUser_x_Territory.UserID=Users.IdGROUPBYUsers.Id,Users.Id,Users.FirstName,Users.LastName,User_x_Territory.UserID

  10. C# 初学者学习 : To do a project without having read big concepts - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion作为IT支持技术员工作了3年后,我决定改变领域并开始编程。我正在通过WroxBeginningVisualC#2008book学习C#,我将其用作指南。我已经阅读了整个POO部分(继承、多态性……委托(delegate)……)。我已经开始了第二部分,即Windows编程(Winforms)我知道你们中的很多人建议做一些工作应用程序来练习,但是如果我还没有开始使用SQLServer、LINQ

随机推荐