最近很多小伙伴都在问MySQL查询每月获取计数和mysql查询每月获取计数信息这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展mysql查询每天的发帖量、mysql-MySQL查询
最近很多小伙伴都在问MySQL查询每月获取计数和mysql查询每月获取计数信息这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展mysql 查询每天的发帖量、mysql-MySQL查询的语句求助,查询不重复一览、mysql-MySql查询的问题,关于库存量的查询操作、Mysql入门系列:MYSQL列类型选择与MYSQL查询效率[图]_MySQL等相关知识,下面开始了哦!
本文目录一览:- MySQL查询每月获取计数(mysql查询每月获取计数信息)
- mysql 查询每天的发帖量
- mysql-MySQL查询的语句求助,查询不重复一览
- mysql-MySql查询的问题,关于库存量的查询操作
- Mysql入门系列:MYSQL列类型选择与MYSQL查询效率[图]_MySQL
MySQL查询每月获取计数(mysql查询每月获取计数信息)
我有一个供用户使用的表,该表具有一个名为“ created”的字段,该字段具有注册日期。
如何获得包含过去12个月每月注册数量计数的列表?像这样:
Month Count1 12322 22223 1224 4653... ...12 7654
我不习惯使用mysql,所以直到现在,我只知道如何计算去年的注册数量,而不是如何按最近12个月的数量进行分组。提前致谢!
更新
现在,我使用@fthiella解决方案来得到这个:
+------------------------------+-------------------------------+----------+| Year(FROM_UNIXTIME(created)) | Month(FROM_UNIXTIME(created)) | Count(*) |+------------------------------+-------------------------------+----------+| 2012 | 4 | 9927 || 2012 | 5 | 5595 || 2012 | 6 | 4431 || 2012 | 7 | 3299 || 2012 | 8 | 429 || 2012 | 10 | 3698 || 2012 | 11 | 6208 || 2012 | 12 | 5142 || 2013 | 1 | 1196 || 2013 | 2 | 10 |+------------------------------+-------------------------------+----------+
我如何强制查询给我计数为0的月份?
@fthiella解决方案(非常感谢!):
SELECT y, m, Count(users.created) FROM ( SELECT y, m FROM (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years, (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym LEFT JOIN users ON ym.y = YEAR(FROM_UNIXTIME(users.created)) AND ym.m = MONTH(FROM_UNIXTIME(users.created)) WHERE (y=YEAR(CURDATE()) AND m<=MONTH(CURDATE())) OR (y<YEAR(CURDATE()) AND m>MONTH(CURDATE())) GROUP BY y, m;
结果:
+------+----+----------------------+| y | m | Count(users.created) |+------+----+----------------------+| 2012 | 5 | 5595 || 2012 | 6 | 4431 || 2012 | 7 | 3299 || 2012 | 8 | 429 || 2012 | 9 | 0 || 2012 | 10 | 3698 || 2012 | 11 | 6208 || 2012 | 12 | 5142 || 2013 | 1 | 1196 || 2013 | 2 | 10 || 2013 | 3 | 0 || 2013 | 4 | 0 |+------+----+----------------------+
答案1
小编典典如果创建的是INT字段,则应使用FROM_UNIXTIME函数将其转换为日期字段,然后使用MONTH函数提取月份:
SELECT Month(FROM_UNIXTIME(created)), Count(*)FROM yourtableWHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEARGROUP BY Month(FROM_UNIXTIME(created))
这将计算最近12个月中创建的所有行。请注意,最好按年份分组:
SELECT Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created)), Count(*)FROM yourtableWHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEARGROUP BY Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created))
如果您需要计算注册号而不是行数,则可以使用类似
COUNT(registration_number)
跳过空值,或
COUNT(DISTINCT registration_number)
仅计算不同的。
编辑
如果您还需要显示count = 0的月份,我将使用类似这样的查询,该查询返回当前年份和上一年的所有月份:
SELECT y, mFROM (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years, (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months;
然后,我将使用LEFT JOIN,它返回第一个查询的所有行,并且仅返回匹配的第二个查询的行:
SELECT y, m, Count(yourtable.created)FROM ( SELECT y, m FROM (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years, (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym LEFT JOIN yourtable ON ym.y = YEAR(FROM_UNIXTIME(yourtable.created)) AND ym.m = MONTH(FROM_UNIXTIME(yourtable.created))WHERE (y=YEAR(CURDATE()) AND m<=MONTH(CURDATE())) OR (y<YEAR(CURDATE()) AND m>MONTH(CURDATE()))GROUP BY y, m
(请注意,这里我只是考虑最近的12个月,因此,如果我们处于2013年4月中旬,它将计算2012年5月至4月13日之间的行数,如果这不是正确的行为,请告诉我)
mysql 查询每天的发帖量
现在表有一个帖子表 有create_date int(11)类型的字段,存入的是发贴时间戳,我需要一个sql查询每天的发帖数量,有什么好的sql查询可以推荐呢?
回复内容:
现在表有一个帖子表 有create_date int(11)类型的字段,存入的是发贴时间戳,我需要一个sql查询每天的发帖数量,有什么好的sql查询可以推荐呢?
select DATE_FORMAT(FROM_UNIXTIME(create_date) as r_date,count(*) from table_name where DATE_FORMAT(FROM_UNIXTIME(create_date),"%Y-%m-%d %H:%i:%s") between "2014-11-21" and "2014-11-22" group by r_date;
mysql-MySQL查询的语句求助,查询不重复一览
mysqlsql
有如下的表:
create table loginlog (
id bigint(20) unsigned not null auto_increment,
username varchar(100) default null,
operate varchar(512) default null,
primary key (id)
) engine=myisam auto_increment=1 default charset=gbk
表内相同username的数据很多,id是自动增量列;
希望用一条SQL语句,查出最新id的username+operate一览,要求结果内username不重复,请帮忙写SQL语句,谢谢!
mysql-MySql查询的问题,关于库存量的查询操作
mysqlselect
create table who_tmp_real_stock2
select sum( num ) as real_stock,goods_id as goods_id_new
from who_goods_stock
group by goods_id_new
alter table who_tmp_real_stock2
add unique (goods_id_new)
select a.goods_id as goods_id,cat_id, d.real_stock, a.goods_sn as goods_sn,goods_name,keywords,is_on_sale,is_delete,
is_best,is_new,is_hot,is_promote,shop_price*100 as shop_price,(shop_price*6.3-in_price)*1000 as profit,
last_update,goods_number,goods_material,goods_color,b.goods_sku_value,customer_rate_num,
(c.sale_num*15+c.stock_num*2) as stock_num,pattern_value,a.add_time
from who_goods_desc b,
who_privilegestocknum c,
who_goods a left join
who_tmp_real_stock2 d on a.goods_id=d.goods_id_new
where a.goods_id=b.goods_id and
a.goods_id=c.goods_id and
a.goods_id>0 and
c.stock_num>0 and
is_on_sale=1 and
is_delete=0 and
is_freeshipping=0 and
a.goods_number>0
select a.*
from who_goods a
where a.goods_id=$id
SELECT a.goods_id AS goods_id, cat_id, a.goods_sn AS goods_sn, goods_name, keywords, is_on_sale, is_delete,
is_best,is_new, is_hot, is_promote, shop_price *100 AS shop_price, last_update, goods_number, goods_material,
goods_color, pattern_value, c.real_stock
FROM who_goods AS a,
who_goods_desc AS b LEFT JOIN who_tmp_real_stock c ON b.goods_id=c.goods_id_new
WHERE a.goods_id = b.goods_id
AND is_on_sale =1 AND
is_delete =0 AND
is_freeshipping =0 AND
a.goods_number >0
想获取库存量大于0的商品信息,不知道这个sql是不是
Mysql入门系列:MYSQL列类型选择与MYSQL查询效率[图]_MySQL
4.3 列类型选择与查询效率
要选择有助于使查询执行更快的列,应遵循如下规则(这里,“BLOB 类型”应该理解为即包含B L O B也包含TEXT 类型):
■ 使用定长列,不使用可变长列。这条准则对被经常修改,从而容易产生碎片的表来说特别重要。例如,应该选择CHAR 列而不选择VARCHAR 列。所要权衡的是使用定长列时,表所占用的空间更多,但如果能够承担这种空间的耗费,使用定长行将比使用可变长的行处理快得多。
■ 在较短的列能够满足要求时不要使用较长的列。如果正使用的是定长的CHAR 列,应该使它们尽量短。如果列中所存储的最长值为40 个字符,那么就不要将其定义为CHAR ( 2 5 5 );只要定义为CHAR(40) 即可。如果能够使用MEDIUMINT 而不是BIGINT,表将会更小(磁盘I/O 也较少),其值在计算中也可以处理得更快。
■ 将列定义为NOT NULL。这样处理更快,所需空间更少。而且有时还能简化查询,因为不需要检查是否存在特例NULL。
■ 考虑使用ENUM 列。如果有一个只含有限数目的特定值的列,那么应该考虑将其转换为ENUM 列。ENUM 列的值可以更快地处理,因为它们在内部是以数值表示的。
■ 使用PROCEDURE ANALYSE( )。如果使用的是MySQL3.23 或更新的版本,应该执行PROCEDURE ANALYSE( ),查看它所提供的关于表中列的信息:
相应输出中有一列是关于表中每列的最佳列类型的建议。第二个例子要求PROCEDURE ANALYSE( ) 不要建议含有多于16 个值或取多于256 字节的ENUM 类型(可根据需要更改这些值)。如果没有这样的限制,输出可能会很长;ENUM 的定义也会很难阅读。根据PROCEDURE ANALYSE( ) 的输出,会发现可以对表进行更改以利用更有效的类型。如果希望更改值类型,使用ALTER TABLE 语句即可。
■ 将数据装入B L O B。用BLOB 存储应用程序中包装或未包装的数据,有可能使原来需要几个检索操作才能完成的数据检索得以在单个检索操作中完成。而且还对存储标准表结构不易表示的数据或随时间变化的数据有帮助。在第3 章ALTER TABLE 语句的介绍中,有一个例子处理存储来自Web 问卷的结果的表。该例子中讨论了在问卷中增加问题时,怎样利用ALTER TABLE 向该表追加列。
解决该问题的另一个方法是让处理Web 的应用程序将数据包装成某种数据结构,然后将其插入单个BLOB 列。这样会增加应用程序对数据进行解码的开销(而且从表中检索出记录后要对其进行编码),但是简化了表的结构,并且不用在更改问卷时对表进行更改。另一方面, BLOB 值也有自己的固有问题,特别是在进行大量的DELETE 或UPDATE 操作时更是如此。删除BLOB 会在表中留下一个大空白,在以后将需用一个记录或可能是不同大小的多个记录来填充。
■ 对容易产生碎片的表使用OPTIMIZE TABLE。大量进行修改的表,特别是那些含有可变长列的表,容易产生碎片。碎片不好,因为它在存储表的磁盘块中产生不使用的空间。随着时间的增长,必须读取更多的块才能取到有效的行,从而降低了性能。任意具有可变长行的表都存在这个问题,但这个问题对BLOB 列更为突出,因为它们尺寸的变化非常大。经常使用OPTIMIZE TABLE 有助于保持性能不下降。
■ 使用合成索引。合成索引列有时很有用。一种技术是根据其他列建立一个散列值,并将其存储在一个独立的列中,然后可通过搜索散列值找到行。这只对精确匹配的查询有效。(散列值对具有诸如“ =”这样的操作符的范围搜索没有用处)。在MySQL3.23版及以上版本中,散列值可利用MD5( ) 函数产生。散列索引对BLOB 列特别有用。有一事要注意,在MySQL3.23.2 以前的版本中,不能索引BLOB 类型。甚至是在3.23.2 或更新的版本中,利用散列值作为标识值来查找BLOB 值也比搜索BLOB 列本身更快。
■ 除非有必要,否则应避免检索较大的BLOB 或TEXT 值。例如,除非肯定WHERE 子句能够将结果恰好限制在所想要的行上,否则SELECT * 查询不是一个好办法。这样做可能会将非常大的BLOB 值无目的地从网络上拖过来。这是存储在另一列中的BLOB 标识信息很有用的另一种情形。可以搜索该列以确定想要的行,然后从限定的行中检索BLOB 值。
■ 将BLOB 值隔离在一个独立的表中。在某些情况下,将BLOB 列从表中移出放入另一个副表可能具有一定的意义,条件是移出BLOB 列后可将表转换为定长行格式。这样会减少主表中的碎片,而且能利用定长行的性能优势。
关于MySQL查询每月获取计数和mysql查询每月获取计数信息的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于mysql 查询每天的发帖量、mysql-MySQL查询的语句求助,查询不重复一览、mysql-MySql查询的问题,关于库存量的查询操作、Mysql入门系列:MYSQL列类型选择与MYSQL查询效率[图]_MySQL的相关信息,请在本站寻找。
本文标签: