使用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;