使用group by查找或删除重复行,请参考
在含有Group by子句的查询语句中,对select关键字后的目标列,存在以下规律
- 使用group by 时,select 涉及的列要么是参与分组的列,要么列包含在聚合函数中
- where将对分组前的所有数据进行筛选。having将对分组后的一组数据搞事情。
例如:
select a,b,avg(c),sum(d) from 表 group by a,b
select非group by的字段
- 可以把group by的结果集当作一个表,然后从这里表里取数就可以了
- 例如:查询,订单表中订单号重复的订单信息,分组字段是orderno,select的信息不仅有orderno,还有其他信息
SELECT p.id, p.orgcode, p.idserial, p.username, p.orderno, p.createtime, p.payflag, p.businessorderno, p.paytime FROM pay_order_trade p, ( SELECT orderno, count(*) 重复次数 FROM pay_order_trade GROUP BY orderno HAVING count(1) > 1 ) s WHERE s.orderno = p.orderno ORDER BY p.orderno DESC;