查询

注意:用date 类型,不要用timestamp,否则groupby会出现当第一个日期会分组。

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `permission`
-- ----------------------------
DROP TABLE IF EXISTS `share`;
CREATE TABLE `share` (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `title` varchar(30) COLLATE utf8_bin NOT NULL COMMENT '标题',
  `type` smallint(6) NOT NULL DEFAULT '0' COMMENT '类型 0、点赞 1、转发',
  `state` smallint(6) NOT NULL DEFAULT '0' COMMENT '状态 0、正常 1、禁用',
  `add_time` date COMMENT '添加时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='权限表';

INSERT INTO learn.share (id, title, add_time) VALUES(10, 'xi', '2017-11-22');
-- ----------------------------
--  查询每一天点赞总数
-- ----------------------------
select count(case when type=0 then 1 else 0 end) as 'count',add_time  from learn.share p where p.type=0 and p.state=0 and p.add_time BETWEEN '2017-11-01' and '2017-11-30'  GROUP BY add_time  ORDER BY add_time;
-- ----------------------------
--  查询每一天转发总数
-- ----------------------------
select count(case when type=1 then 1 else 0 end) as 'count',add_time  from learn.share p where p.type=1 and  p.state=0 and p.add_time BETWEEN '2017-11-01' and '2017-11-30'  GROUP BY add_time  ORDER BY add_time;

-- ----------------------------
--  查询某天点赞总数
-- ----------------------------
select count(case when type=1 then 1 else 0 end),DATE_FORMAT(s.add_time,'%m-%d-%Y') as e from learn.share s where s.type=1 and s.state=0 and DATE_FORMAT(s.add_time,'%e')='21' group by e

MySQL 数据类型
MySQL中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
数值类型
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGERSMALLINTDECIMALNUMERIC),以及近似数值数据类型(FLOATREALDOUBLE PRECISION)。
关键字INTINTEGER的同义词,关键字DECDECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
类型  大小  范围(有符号) 范围(无符号) 用途
TINYINT 1 字节    (-128127)  (0255) 小整数值
SMALLINT    2 字节    (-32 76832 767)    (065 535)  大整数值
MEDIUMINT   3 字节    (-8 388 6088 388 607)  (016 777 215)  大整数值
INTINTEGER 4 字节    (-2 147 483 6482 147 483 647)  (04 294 967 295)   大整数值
BIGINT  8 字节    (-9 233 372 036 854 775 8089 223 372 036 854 775 807)  (018 446 744 073 709 551 615)  极大整数值
FLOAT   4 字节    (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-383.402 823 466 351 E+38) 0,(1.175 494 351 E-383.402 823 466 E+38)   单精度
浮点数值
DOUBLE  8 字节    (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-3081.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-3081.797 693 134 862 315 7 E+308) 双精度
浮点数值
DECIMALDECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值    依赖于M和D的值    小数值
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATETIMESTAMPTIMEYEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
类型  大小
(字节)    范围  格式  用途
DATE    3   1000-01-01/9999-12-31   YYYY-MM-DD  日期值
TIME    3   '-838:59:59'/'838:59:59'    HH:MM:SS    时间值或持续时间
YEAR    1   1901/2155   YYYY    年份值
DATETIME    8   1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP   4   
1970-01-01 00:00:00/2038
结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038119日 凌晨 03:14:07
YYYYMMDD HHMMSS 混合日期和时间值,时间戳
字符串类型
字符串类型指CHARVARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
类型  大小  用途
CHAR    0-255字节 定长字符串
VARCHAR 0-65535 字节  变长字符串
TINYBLOB    0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT    0-255字节 短文本字符串
BLOB    0-65 535字节  二进制形式的长文本数据
TEXT    0-65 535字节  长文本数据
MEDIUMBLOB  0-16 777 215字节  二进制形式的中等长度文本数据
MEDIUMTEXT  0-16 777 215字节  中等长度文本数据
LONGBLOB    0-4 294 967 295字节   二进制形式的极大文本数据
LONGTEXT    0-4 294 967 295字节   极大文本数据
CHARVARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY和VARBINARY类类似于CHARVARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。
<!-- 查询某用户搞怪证书模块一月数据统计 -->
     <select id="listCerNumberOfPe" parameterType="java.util.Map" resultType="java.util.Map">
              SELECT
            <if test="param.distinct != null">
              DISTINCT
            </if> 
               DATE_FORMAT(c.add_time,'%Y-%m-%d') AS timeLine,
            <if test="param.userid != null">
               COUNT(CASE WHEN user_id=#{param.userid} 
            </if>
            <if test="param.state != null">
               AND state!=#{param.state} THEN TRUE ELSE NULL END) AS everyCount
            </if>
               FROM ai_certificate_user c WHERE c.add_time BETWEEN #{param.beginDate} AND #{param.endDate}
               GROUP BY timeLine 
               ORDER BY timeLine
     </select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值