如何验证group by的查询SQL中是否包含重复数据
来源:互联网 发布:怎么备份游戏数据 编辑:程序博客网 时间:2024/05/16 09:38
引言:
我们在项目开发过程中,总是会碰到一些书写复杂sql时(特别是要设计到金额计算),总是会怕统计到多余或重复的记录,那又要怎么查看呢?
例子:如下SQL
SELECT b.bldg_id,b.bldg_name,SUM(pu.psu_salearea) AS pre_sale_area,IFNULL(SUM(pu.psu_sumprice),'0.00') AS pre_sale_total,IFNULL(SUM(pu.psu_sumprice)/SUM(pu.psu_salearea),'0.00') AS pre_average_price,SUM(IF(u.un_sale_status=8,pu.psu_salearea,0)) AS subscribe_area,SUM(IF(o.orderstatus=2 AND apprevestatus IN(2,4),o.deposit,0)) AS subscribe_price,IFNULL(SUM(IF(o.orderstatus=2 AND apprevestatus IN(2,4),o.deposit,0))/SUM(IF(u.un_sale_status=8,pu.psu_salearea,0)),'0.00') AS subscribe_average_price,SUM(IF(u.un_sale_status=6,pu.psu_salearea,0)) AS sign_area,SUM(IF(o.orderstatus=4 AND o.apprevestatus IN(2,4),o.contractamount,0)) AS sign_price,IFNULL(SUM(IF(o.orderstatus=4 AND o.apprevestatus IN(2,4),o.contractamount,0))/SUM(IF(u.un_sale_status=6,pu.psu_salearea,0)),'0.000000') AS sign_average_price,SUM(IF(u.un_sale_status=3,pu.psu_salearea,0)) AS no_sale_area,IFNULL(SUM(IF(u.un_sale_status=3,pu.psu_sumprice,0)),'0.00') AS no_sale_total,IFNULL(SUM(IF(u.un_sale_status=3,pu.psu_sumprice,0))/SUM(IF(u.un_sale_status=3,pu.psu_salearea,0)),'0.000000') AS no_sale_average_price,SUM(IF(o.orderstatus=2 AND apprevestatus IN(2,4),o.deposit,0))+SUM(IF(o.orderstatus=4 AND o.apprevestatus IN(2,4),o.contractamount,0)) AS back_price FROM bm_units u INNER JOIN ps_unitinfo pu ON pu.un_id=u.un_id LEFT JOIN bm_building b ON b.bldg_id=pu.bldg_id LEFT JOIN ps_order o ON o.unitid=u.un_id WHERE pu.co_id = '13' AND u.status = 1 AND pu.status = 1 GROUP BY pu.bldg_id LIMIT 0,10
1、从上面得出通过group by统计分组数据是可能不够正确的,因为没有办法保证统计出来的某个表的记录不会重复
2、此时需要用一个MYSQL可能大家很少用到的一个函数GROUP_CONCAT()
3、用法如下:
SELECT GROUP_CONCAT(o.id) AS chongfu,......
4、如何辨别该函数查询出来的结果,请看下图
5、如上图,结果显示有重复的id存在,则说明统计结果可能不正确,需要继续优化SQL
6、注意,一般采用GROUP_CONCAT()
的使用情景是SQL中用了group by,但是因为联表的原因可能会产生重复的字段数据,此时需要这个函数去鉴定数据的准确性。
0 0
- 如何验证group by的查询SQL中是否包含重复数据
- SQL中group by分组查询的内容(包含to_char和order by)
- 查询是否包含字段重复的数据
- Group by 分组选择表中重复的数据
- SQL查询一列中是否有重复数据
- 查询表中重复的数据SQL
- group by 字段 count 中包含子查询 优化 方式
- distinct 和 group by 在查询多列数据去重复时的区别在哪?
- 如何查询数据表中重复的数据?
- SQL查询语句中select from where group by having order by的执行顺序
- 使用mysql的disctinct group by查询不重复记录
- mysql查询数据表中是否有重复的数据
- SQL分组查询group by
- SQL group by分组查询
- SQL group by分组查询
- SQL group by分组查询
- 关于SQL语句的group by 以及如何 “先排序,再查询”
- Oracle查询中如何去除查询的重复数据
- WPF开发进阶
- BZOJ 1121: [POI2008]激光发射器SZK 光路可逆,物理
- js 下拉框选中的值
- 用XMLHTTPRequest来进行ajax异步数据交交互
- js修改checkbox选中状态
- 如何验证group by的查询SQL中是否包含重复数据
- Leetcode 132 - Palindrome Partitioning II(dp)
- Snowflake算法
- CentOS7.2上Fabric报错ValueError: CTR mode needs counter parameter, not IV
- 改变,做更好的自己——物理基础
- Javascript模块化编程require.js的用法
- Linux常用命令
- BZOJ 1087, 互不侵犯
- Java & Android 编程格式规范