以时间为跨度统计不同的值,在该时间出现的次数。
成都创新互联专注于沙湾企业网站建设,响应式网站建设,商城网站建设。沙湾网站建设公司,为沙湾等地区提供建站服务。全流程定制网站开发,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
语言如下:
select count(*),'列名' from tablename group by '列名'
select count(*),a_yqm from user group by a_yqm
举例:
这里,我要查询出1年内每个月份periods字段不同值的次数。
比如下图中可见的2015-4月,periods为2出现了3次,3出现了1次,最关键的是 periods你不知道有多少种可能的值,也许这个月有1,也许没有。
貌似明白你的意思了。这是我写的测试,你看是不是这个意思:
准备测试环境:
CREATE
TABLE
`tt`
(
`id`
int(11)
NOT
NULL
default
'0',
`value`
varchar(2)
default
'',
PRIMARY
KEY
(`id`)
);
insert
into
tt
values(1,'a');
insert
into
tt
values(2,'b');
insert
into
tt
values(3,'c');
insert
into
tt
values(4,'a');
insert
into
tt
values(5,'b');
开始:
1,怎么样得到相同的值的和
a有相同的
b有相同的
a
b
为两个2
mysql
select
tt1.value,count(*)
from
tt
as
tt1
,tt
as
tt2
where
tt1.id!=tt2.id
and
tt1.value=tt2.value
group
by
tt1.value;
+-------+----------+
|
value
|
count(*)
|
+-------+----------+
|
a
|
2
|
|
b
|
2
|
+-------+----------+
2
rows
in
set
(0.00
sec)
//
得到相同的次数
mysql
select
count(*)
from
(select
tt1.value
from
tt
as
tt1
,tt
as
tt2
where
tt1.id!=tt2.id
and
tt1.value=tt2.value
group
by
tt1.value
)as
tt3;
+----------+
|
count(*)
|
+----------+
|
2
|
+----------+
1
row
in
set
(0.00
sec)
//
得到不同的次数
mysql
select
count(*)
from
(select
tt1.value
from
tt
as
tt1
,tt
as
tt2
where
tt1.id!=tt2.id
and
tt1.value!=tt2.value
group
by
tt1.value
)as
tt3;
+----------+
|
count(*)
|
+----------+
|
3
|
+----------+
1
row
in
set
(0.00
sec)
2,和不同值的和上面得到一个2
然后用
最大的ID减
5
-2
=
3
这里不太明白
不同值的和应该是3
也就是abc3种了,相同的和是2
,
无论如何,2种情况我都写下来
mysql
select
max(id)-
(select
count(*)
from
(select
tt1.value
from
tt
as
tt1
,tt
as
tt2
where
tt1.id!=tt2.id
and
tt1.value=tt2.value
group
by
tt1.value
)as
tt3)
from
tt;
+-------------------------------------------------------------------------------
-----------------------------------------------------------------------+
|
max(id)-
(select
count(*)
from
(select
tt1.value
from
tt
as
tt1
,tt
as
tt2
wh
ere
tt1.id!=tt2.id
and
tt1.value=tt2.value
group
by
tt1.value
)as
tt3)
|
+-------------------------------------------------------------------------------
-----------------------------------------------------------------------+
|
3
|
+-------------------------------------------------------------------------------
-----------------------------------------------------------------------+
1
row
in
set
(0.00
sec)
mysql
select
max(id)
-
(select
count(*)
from
(select
tt1.value
from
tt
as
tt1
,tt
as
tt2
where
tt1.id!=tt2.id
and
tt1.value!=tt2.value
group
by
tt1.value
)as
tt3)
from
tt;
+-------------------------------------------------------------------------------
------------------------------------------------------------------------+
|
max(id)
-
(select
count(*)
from
(select
tt1.value
from
tt
as
tt1
,tt
as
tt2
wh
ere
tt1.id!=tt2.id
and
tt1.value!=tt2.value
group
by
tt1.value
)as
tt3)
|
+-------------------------------------------------------------------------------
------------------------------------------------------------------------+
|
2
|
+-------------------------------------------------------------------------------
------------------------------------------------------------------------+
1
row
in
set
(0.00
sec)
你看你的意思是不是这个
insert会更快一点,可以使用 INSERT INTO target_table SELECT columns FROM source_table 高效地将大量行从一个表(例如临时表)。
传输到按最小方式记录日志的其他表中。按最小方式记录日志可以提高语句的性能,减少在事务期间此操作填充可用事务日志空间的可能性。INSERT INTO 语句用于向表格中插入新的行。
INSERT INTO 表名称 VALUES (值1, 值2,....)INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')。
Update是一个数据库SQL语法用语,用途是更新表中原有数据,单独使用时使用where匹配字段。Update 语句用于修改表中的数据。UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值。
扩展资料:
UPDATE的用法:
更新某一行中的一个列。
我们为 lastname 是 quot;Wilsonquot; 的人添加 firstname:
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 。
更新某一行中的若干列。
我们会修改地址(address),并添加城市名称(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'WHERE LastName = 'Wilson'。
参考资料来源:百度百科-SQL INSERT INTO
参考资料来源:百度百科-update
数据量有多大?上亿条?实际的应用范围是什么?select * from table where id=? and name=? 这样效率已经ok的了,别忘了id和name的索引