mySQL中count查询

1.目的:

想要查询一个表里数据总条数今日更新的数据条数

2.原来

想到的需要写两个SQL语句,但是比较麻烦
SQL1:

SELECT COUNT(*) FROM `sys_logininfor`

SQL2:

		SELECT COUNT(*) FROM `sys_logininfor`
		where TO_DAYS(login_time) = TO_DAYS(NOW())

3.优化

在得知count()中可以写case…when…的语句时,想到了如下的方法:

SELECT COUNT(CASE WHEN TO_DAYS(login_time) = TO_DAYS(NOW()) THEN 1 END) AS TodayNum FROM `sys_logininfor`

4.再优化省去case…when…

SELECT COUNT(TO_DAYS(login_time) = TO_DAYS(NOW()) OR NULL) AS TodayLogin, COUNT(*) AS AllLogin FROM `sys_logininfor`

5.补充(按照时间查询)

一、查询当天的记录:
1 select * from create_time where TO_DAYS(create_time) = TO_DAYS(NOW())
注意:这里的create_time是数据库中的时间字段,会根据这个时间去和今天的时间对比获取数据.

二、查询昨天(固定几天前)的记录:
1 select count(1) from kunyao_shop_order where is_payed = 1 and TO_DAYS(NOW()) - TO_DAYS(create_time) = 1
注意:这里的时间实际上和查询当天的记录一样,但是用了算术差的概念,同样的要获取前天的时间就将结果的1改成2即可

三、查询当前这周的数据:

1 SELECT * FROM wx_fund_record WHERE YEARWEEK(date_format(create_time,’%Y-%m-%d’)) = YEARWEEK(now());
注意:这里的create_time是数据库中的时间字段,会根据这个时间去和今天的时间对比获取数据,除此之外,这个SQL语句获取的是美国的一周数据,中国和美国的周期不一样,美国的周日是中国的周一,所以如果要按照中国的周获取结果,需要推迟一天,SQL在下面:

1 SELECT * FROM wx_fund_record WHERE store_id=1 AND YEARWEEK(date_format(create_time,’%Y-%m-%d’),1) = YEARWEEK(now(),1);
2 SELECT SUM(money) FROM wx_fund_record WHERE store_id=?1 AND DATE_FORMAT( create_time, ‘%Y%m’ ) = DATE_FORMAT( CURDATE( ) , ‘%Y%m’ )

四、查询本月的数据:
1 SELECT * FROM wx_fund_record WHERE store_id=1 AND DATE_FORMAT( create_time, ‘%Y%m’ ) = DATE_FORMAT( CURDATE( ) , ‘%Y%m’ )
注意:这里的create_time是数据库中的时间字段,会根据这个时间去和今天的时间对比获取数据.

五、查询当前日期之前一周内每天的数据

SELECT a.click_date,IFNULL(b.count,0) AS COUNT
FROM (
SELECT CURDATE() AS click_date
UNION ALL
SELECT DATE_SUB(CURDATE(), INTERVAL 1 DAY) AS click_date
UNION ALL
SELECT DATE_SUB(CURDATE(), INTERVAL 2 DAY) AS click_date
UNION ALL
SELECT DATE_SUB(CURDATE(), INTERVAL 3 DAY) AS click_date
UNION ALL
SELECT DATE_SUB(CURDATE(), INTERVAL 4 DAY) AS click_date
UNION ALL
SELECT DATE_SUB(CURDATE(), INTERVAL 5 DAY) AS click_date
UNION ALL
SELECT DATE_SUB(CURDATE(), INTERVAL 6 DAY) AS click_date
) a LEFT JOIN (
SELECT DATE(create_time) AS totalMoney, SUM(money+wallet) AS COUNT
FROM kunyao_shop_member_fund_record WHERE TYPE = 2
GROUP BY DATE(create_time)
) b ON a.click_date = b.totalMoney;

6.补充(MySQL 的CASE WHEN 语句使用说明)

(1)mysql数据库中CASE WHEN语句。
case when语句,用于计算条件列表并返回多个可能结果表达式之一。
CASE 具有两种格式:简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。 CASE 搜索函数计算一组布尔表达式以确定结果。 两种格式都支持可选的 ELSE 参数。
语法如下:
1)简单 CASE 函数:

CASE input_expression
WHEN when_expression THEN
    result_expression [...n ] [
ELSE
    else_result_expression
END

参数介绍:
input_expression 是使用简单 CASE 格式时所计算的表达式。Input_expression 是任何有效的 Microsoft SQL Server 表达式。
WHEN when_expression 使用简单 CASE 格式时 input_expression 所比较的简单表达式。When_expression 是任意有效的 SQL Server 表达式。Input_expression 和每个 when_expression 的数据类型必须相同,或者是隐性转换。

占位符 ,表明可以使用多个 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。

THEN result_expression 当 input_expression = when_expression 取值为 TRUE,或者 Boolean_expression 取值 TRUE 时返回的表达式。
result expression 是任意有效的 SQL Server 表达式。

ELSE else_result_expression 当比较运算取值不为 TRUE 时返回的表达式。如果省略此参数并且比较运算取值不为 TRUE,CASE 将返回 NULL 值。else_result_expression 是任意有效的 SQL Server 表达式。else_result_expression 和所有 result_expression 的数据类型必须相同,或者必须是隐性转换。

简单 CASE 函数: 返回结果值介绍:

计算 input_expression,然后按指定顺序对每个 WHEN 子句的 input_expression = when_expression 进行计算。
返回第一个取值为 TRUE 的 (input_expression = when_expression) 的 result_expression。如果没有取值为 TRUE 的 input_expression = when_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。

2)CASE 搜索函数:

CASE
WHEN Boolean_expression THEN
    result_expression [...n ] [
ELSE
    else_result_expression
END

参数介绍:
WHEN Boolean_expression 使用 CASE 搜索格式时所计算的布尔表达式。Boolean_expression 是任意有效的布尔表达式。结果类型从 result_expressions 和可选 else_result_expression 的类型集合中返回最高的优先规则类型。有关更多信息,请参见数据类型的优先顺序。

CASE 搜索函数:返回结果值介绍:
按指定顺序为每个 WHEN 子句的 Boolean_expression 求值。返回第一个取值为 TRUE 的 Boolean_expression 的 result_expression。
如果没有取值为 TRUE 的 Boolean_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。

参考笔记:

MySQL查询时间
MySQLcase when语句

仅用于个人纪录

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值