select count(distinct assess_date) from kunxiaoan_snapshot where project_id =1 and assess_date >= '2023-05-12' and assess_date <='2023-05-12' ; select count(1) from ( select distinct assess_date from kunxiaoan_snapshot where project_id = 1 and assess_date >= '2023-05-12' and assess_date <= '2023-05-12' ) a 的区别
时间: 2024-02-10 18:31:29 浏览: 65
这两个 SQL 查询语句的结果相同,都是统计在指定日期范围内,某个项目的评估日期有多少个。
但是,这两个查询语句的实现方式略有不同。
第一个查询语句使用了 count(distinct) 函数,它会统计满足条件的不同值的数量。这里统计的是在指定日期范围内,kunxiaoan_snapshot 表中 project_id 为 1 的记录的不同评估日期数量。这种方式虽然简单,但当数据量较大时,效率较低。
第二个查询语句使用了子查询,它会先从 kunxiaoan_snapshot 表中筛选出满足条件的记录,然后再对其中的评估日期进行去重,最后统计不同的评估日期数量。这种方式虽然比较复杂,但当数据量较大时,效率较高。
综上所述,第二个查询语句的实现方式相比第一个查询语句更加高效,尤其是在数据量较大时。
相关问题
CREATE TABLE tmp_x_sijirbsj as SELECT * FROM `driver_assess_info` WHERE ` 日期` BETWEEN @yue AND @riqi; SELECT @riqi as '日期' ,` 注册运营城市` ,count(distinct case when ` 在线时长(小时)`>0 and ` 日期`<=cast(@riqi as date) then ` 司机ID` else null end) as '累计在线司机数' ,count(distinct case when ` 在线时长(小时)`>0 and ` 日期`>=cast(@yue as date) and ` 日期`<=cast(@riqi as date) then ` 司机ID` else null end) as '本月在线司机数' ,count(distinct case when ` 应答量`>0 and ` 日期`<=cast(@riqi as date) then ` 司机ID` else null end) as '累计应答司机数' ,count(distinct case when ` 应答量`>0 and ` 日期`>=cast(@yue as date) and ` 日期`<=cast(@riqi as date) then ` 司机ID` else null end) as '本月应答司机数' ,count(distinct case when ` 完单量`>0 and ` 日期`<=cast(@riqi as date) then ` 司机ID` else null end) as '累计完单司机数' ,count(distinct case when ` 完单量`>0 and ` 日期`>=cast(@yue as date) and ` 日期`<=cast(@riqi as date) then ` 司机ID` else null end) as '本月完单司机数' FROM `tmp_x_sijirbsj` group by ` 注册运营城市`
你想创建一个名为 tmp_x_sijirbsj 的表,并从 driver_assess_info 表中选择满足日期范围条件的数据。然后,你想计算每个城市在给定日期之前和本月的累计在线司机数、累计应答司机数和累计完单司机数,以及本月的在线司机数、应答司机数和完单司机数。最后,你希望按注册运营城市进行分组。请问有什么其他问题吗?
阅读全文