mysql 语句group by,distinct,find_in_set, left join,group_concat

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012447842/article/details/82628914

 

  1. group by 和 distinct的区别

  2. FIND_IN_SET语法

  3. left join

  4. group_concat

group by 和 distinct的区别:

共同点: 去重

group by

select * from i_plc_procedure_record where updateTime > "2018-09-04 00:00:00" group by cProcedureID

distinct:

distinct 字段需放在字段最前边, 要不然会报错, 去重

错误方法:

select cProcedureID,distinct updateTime from i_plc_procedure_record where  group by cProcedureID

报错如下:

select  cProcedureID,distinct updateTime, Num  from i_plc_procedure_record where updateTime > "2018-09-04 00:00:00" group by cProcedureID

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'distinct updateTime, Num  from i_plc_procedure_record where updateTime > "2018-0' at line 3

正确使用方法:

select distinct cProcedureID, updateTime from i_plc_procedure_record where  group by cProcedureID

不同点: group by 的功能比distinct更加强大

group by 聚合函数,  

GROUP BY 语法

SELECT column_name, function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name;

语句使用:

select cProcedureID, max(updateTime) as updateTime, SUM(Num*unitPrice) as Money, Num  from i_plc_procedure_record where updateTime > "2018-09-04 00:00:00" group by cProcedureID

FIND_IN_SET语法:

mysql 语法:

FIND_IN_SET(str,strlist)

str 要查询的字符串

strlist 字段名 参数以”,”分隔 如 (1,2,6,8)

查询字段(strlist)中包含(str)的结果,返回结果为null或记录

FIND_IN_SET和IN 之间的关联

相同点

SELECT accessWebID FROM i_plc_authority where FIND_IN_SET(id,(select authorityID from i_plc_users where id =UserID))

SELECT accessWebID FROM i_plc_authority where id in (select authorityID from i_plc_users where id =UserID)

区别点

select * from i_plc_product where FIND_IN_SET("1", cInvName) and operationFlag=9  正常运行

select * from i_plc_product where  "1" in cInvName and operationFlag=9  报错

[SQL] -- select * from i_plc_sfc_operation where operationFlag=9 order by opCode + 0

select * from i_plc_product where  "1" in cInvName and operationFlag=9

[Err] 1064- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'cInvName and operationFlag=9' at line 2

left join: 

left join 和 where的区别

left join(1):

select w.OpSeq,c.WcName from technic1workcenter as w left join (select WcName,WcCode from i_plc_workcenter where operationFlag=9) c on c.WcCode=w.WcCode where w.operationFlag=9

left join(2):

select w.OpSeq,c.WcName from technic1workcenter as w left join i_plc_workcenter c on c.WcCode=w.WcCode where w.operationFlag=9 and c.operationFlag=9

(一)查询的数据为什么比(二)多?  是因为technic1workcenter的数据没有与i_plc_workcenter关联, 但是在(二)中存在 where c.operationFlag=9, 导致直接过滤掉了

where类似于inner join:

select w.OpSeq,w.WcCode,w.id,c.WcName from technic1workcenter w, i_plc_workcenter c where c.WcCode=w.WcCode and w.operationFlag=9 and c.operationFlag=9

4: group_concat

语法: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

Select GROUP_CONCAT(d.peoName) '所属人员(必须)' From i_plc_machine a LEFT JOIN
 (select JobID,peoName from i_plc_staff where operationFlag = 9) d on FIND_IN_SET(d.JobID,a.cPsn) Where a.operationFlag=9 GROUP BY a.id  Order By a.id;

猜你喜欢

转载自blog.csdn.net/u012447842/article/details/82628914