首页 > 数据库 >工作记录_mysql_AND优先级高于OR优先级

工作记录_mysql_AND优先级高于OR优先级

时间:2023-06-13 18:12:54浏览次数:369  
标签:count task 优先级 name 记录 mysql department type LIKE

1.错误示例

SELECT 
	t.task_department_name, 
	COUNT(*) total_count,
	SUM(CASE WHEN status='done' THEN 1 ELSE 0 END) AS finish_count,
	SUM(CASE WHEN status<>'done' THEN 1 ELSE 0 END) AS unfinish_count
FROM `t_task` t
-- WHERE task_type = 'update' AND (task_department_name LIKE '%镇' OR task_department_name LIKE '%街')
WHERE t.task_department_name LIKE '%镇' 
OR t.task_department_name LIKE '%街' 
OR t.task_department_name LIKE '%机关'
AND t.task_type in ('create')
GROUP BY task_department_name

结果:该结果与预期不符(eg:秀全街总数应该是3个,并且没有完成的任务)

2。错误原因分析

AND优先级高于OR优先级,上面代码实际上下面这样的:
SELECT 
	t.task_department_name, 
	COUNT(*) total_count,
	SUM(CASE WHEN status='done' THEN 1 ELSE 0 END) AS finish_count,
	SUM(CASE WHEN status<>'done' THEN 1 ELSE 0 END) AS unfinish_count
FROM `t_task` t
-- WHERE task_type = 'update' AND (task_department_name LIKE '%镇' OR task_department_name LIKE '%街')
WHERE t.task_department_name LIKE '%镇' 
OR t.task_department_name LIKE '%街' 
OR (t.task_department_name LIKE '%机关'
AND t.task_type in ('create'))
GROUP BY task_department_name
也就是说:t.task_department_name LIKE '%机关'先和t.task_type in ('create')进行AND运算,这就是出错之处

3.错误解决:加括号明确优先级:

SELECT 
	t.task_department_name, 
	COUNT(*) total_count,
	SUM(CASE WHEN status='done' THEN 1 ELSE 0 END) AS finish_count,
	SUM(CASE WHEN status<>'done' THEN 1 ELSE 0 END) AS unfinish_count
FROM `t_task` t
-- WHERE task_type = 'update' AND (task_department_name LIKE '%镇' OR task_department_name LIKE '%街')
WHERE (t.task_department_name LIKE '%镇' 
OR t.task_department_name LIKE '%街' 
OR t.task_department_name LIKE '%机关')
AND t.task_type in ('create')
GROUP BY task_department_name

解决:

标签:count,task,优先级,name,记录,mysql,department,type,LIKE
From: https://www.cnblogs.com/rong-xu-drum/p/17478384.html

相关文章

  • MySQL字符索引没用上问题
    某一天,接口突然502,运维同学说没有可用的PHP进程了,看监控说是这个接口夯住了,导致请求进不来,临时把这个接口给返回了200(PS:线上这个接口没有实际作用,所以这么操作了);给了慢查询的SQL,用explain看了下,发现竟然没有用到创建的索引,此时数据库的量有大概150万行,对SQL里where字段加了双引......
  • 记录一段mysql代码
    SELECTf.*,tmp.userid,tmp.cishuFROMfx_userf,(SELECTa.id,b.useridASuserid,COUNT(*)AScishuFROM`fx_user`ASaLEFTJOIN`fx_plan`ASbONa.id=b.useridANDb.fxtype=0GROUPBYa.id)tmpWHEREf.id=tmp.idANDpriority=1ORDERBYid......
  • RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增记录SQL执行过程
    有时我们需要记录整个系统运行的SQL以作分析,特别是在上线前这对我们做内部测试也非常有帮助,当然记录SQL的方法有很多,也可以使用三方的组件。3.2版本我们在框架底层新增了记录框架运行的所有SQl过程保存到用户指定的地方以便分析查看,只需要在配置文件把配置项”LogSQL”设置为Tr......
  • C#连接MySql数据库的方法
     用MySQLDriverCS连接MySQL数据库   先下载和安装MySQLDriverCS,地址:   http://sourceforge.net/projects/mysqldrivercs/   在安装文件夹下面找到MySQLDriver.dll,然后将MySQLDriver.dll添加引用到项目中   注:我下载的是版本是MySQLDriverCS-n-EasyQueryTools-4.0......
  • mysql mariadb修改端口后启动失败
    修改端口号启动失败关闭SETLinux临时关闭,不需要重启电脑,重启后失效执行命令:setenforce0永久关闭,需要重启机器,修改/etc/selinux/config文件将SELINUX=enforcing改为SELINUX=disabled重启mysql服务即可......
  • spring boot连接Mybatis数据库的配置文件(MySql、SQLserver、Oracle)
    序号类型地址1MySQLMySQL操作之概念、SQL约束(一)2MySQLMySQL操作之数据定义语言(DDL)(二)3MySQLMySQL操作之数据操作语言(DML)(三)4MySQLMySQL操作之数据查询语言:(DQL)(四-1)(单表操作)5MySQLMySQL操作之数据查询语言:(DQL)(四-2)(多表查询)6MySQLMySQL操作之数据控制语言:(DC)(五)7MySQLMySQL操作之数......
  • mysql笔记
    1.mysql初始密码修改:进入mysql后,输入:ALTERUSERroot@localhostIDENTIFIEDBY'新密码';2.mysql打开命令:1.mysql-uroot-p,密码;2.mysql-uroot-p密码;3.显示所有数据库:showdatabases;;4.删除数据库:dropdatabase数据库名;;......
  • MySQL 8 配置文件
    #[client]#user=root#password=1111aaA_[mysql]prompt="\u@mysqldb\R:\m:\s[\d]>"no-auto-rehash[mysqld_safe]malloc-lib=tcmalloc[mysqldump]single-transaction[mysqld]#basicsettings#server-id=11port=3306user=mys......
  • mysql数据库备份及恢复命令mysqldump,source的用法
    还原一个数据库:mysql-hlocalhost-uroot-p123456www<c:/www.sql备份一个数据库:mysqldump-hlocalhost-uroot-p123456www>d:/www2008-2-26.sql  //以下是在程序中进行测试//$command="mysqldump--opt-h$dbhost-u$dbuser-p$dbpass$dbname|gzip>$backup......
  • cloudflare 通过api删除ns 记录
    取dns记录idcurl--requestGET\--urlhttps://api.cloudflare.com/client/v4/zones/zone_id/dns_records\--header'Content-Type:application/json'\--header'X-Auth-Email:email'\--header'X-Auth-KEY:global_key' 通过dnsid删除......