MySQL Grop By操作

166 阅读2分钟

查询多个字段,对其中一个字段进行grop by操作,会出现错误,主要是因为MySQL没有设置

SQL语句为:
SELECT site_name,title FROM `error_title2` GROUP BY site_name 

这是报错:
1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'spider_data.error_title2.title' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

需要设置一个参数,可以实现临时的处理
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

这个错误是因为你的MySQL服务器启用了ONLY_FULL_GROUP_BY模式。在ONLY_FULL_GROUP_BY模式下,如果你使用GROUP BY语句进行分组时,SELECT语句中的列必须要么是聚合函数,要么包含在GROUP BY子句中,否则就会出现该错误。

在你的SELECT语句中,标题(title)列既不是聚合函数,也没有包含在GROUP BY子句中。为了解决这个错误,你可以在SELECT语句中将标题列包含在GROUP BY子句中,或者使用聚合函数对标题列进行聚合,例如使用MAX函数:

SELECT site_name, MAX(title) ,count(*) FROM error_title2  GROUP BY site_name;

mysql 左查询

1 表名:org,company   字段:name,address,code

2 查询所有字段
SELECT * FROM org LEFT JOIN company ON org.name = company.name 

3 查询指定字段

SELECT org.name, company.address,company.code FROM org LEFT JOIN company ON org.code = company.code;

4 利用左查询更新数据
表名:tyc,两表对应的唯一字段url,要更新的字段:行业,行业大类,标签,行业分类
连表查询初次更新比较慢,可能需要1-2小时,后期会逐渐变快

UPDATE tyc
JOIN tyc_update ON tyc.url = tyc_update.url
SET tyc.行业 = tyc_update.行业,
    tyc.标签 = tyc_update.标签,
    tyc.行业大类 = tyc_update.行业大类,
    tyc.行业分类 = tyc_update.行业分类
WHERE tyc_update.行业大类 IS NOT NULL;

这种查询方式,链接org和company两个表,输出字段齐全,没有的字段会用null代替,便于对比

MySQL批量查询

1 可以通过字段firm_name 查询出来所有的字段

SELECT firm_name,register_address,tyshxydm FROM ods_tyc WHERE firm_name in ('杭州龙冠实业有限公司安吉分公司','三门县小宜茶楼', '三门县银康茶室')

2批量查询数量
要查询行业,行业分类,行业大类三个字段,并且根据行业统计数量,查询多种分类的数量。并且用grop by来操作

SELECT 行业,`行业大类`,`行业分类`,count(*) FROM tyc WHERE `行业` in ('谷物种植', '豆类、油料和薯类种植') and `所在区县`='安吉县' GROUP BY `行业`