查询多个字段,对其中一个字段进行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 `行业`