mysqlsum函数可以用来求和指定字段中的值,可以处理包括汉字在内的任何字符类型的字段。它可以用来统计数据表中的记录总数,以及某个字段的总和,比如货币金额、数值等。
select left(times,4), sum(coun) from tablename group by left(times,4) order by left(times,4)上面代码中tablename 就是你的表名
首先我们需要明白SQL语言的局限,它属于面向集合的描述性语言,该语言无法在记录间进行浏览定位,因此涉及需要进行不同记录间进行比较的问题时,它会很无力。题主这类问题最好交由应用程序端用编程的方法解决,而在数据库端单纯用SQL语言解决则会相当麻烦和低效,很多时候甚至是无解的。
下面就题主的问题尝试用纯SQL查询来实现,请参考系列实验:
-- 创建测试表并插入测试数据
DROP TABLE IF EXISTS TEST
CREATE TABLE TEST (USERID VARCHAR(10),MONTHID INT)
INSERT INTO TEST VALUES
('10001',1),('10002',3),('10003',2),('10002',4),
('10002',3),('10001',2),('10001',3),('10002',12)
-- 查看测试数据
SELECT * FROM TEST
-- 筛选出曾经连续活跃2个月和3个月的用户ID
SELECT T.USERID,
CASE WHEN MAX(T.DIFF1)=1 THEN '是' ELSE '否' END AS 连续活跃两月,
CASE WHEN MAX(T.DIFF2)=2 THEN '是' ELSE '否' END AS 连续活跃三月
FROM (SELECT A.*,
(A.MONTHID-(SELECT MAX(MONTHID) FROM TEST WHERE
USERID=A.USERID AND MONTHID<A.MONTHID))
AS DIFF1,
(A.MONTHID-(SELECT MAX(MONTHID) FROM TEST WHERE
USERID=A.USERID AND
MONTHID<(SELECT MAX(MONTHID) FROM TEST WHERE
USERID=A.USERID AND MONTHID<A.MONTHID))) AS DIFF2 FROM TEST A) T
WHERE T.DIFF1=1 OR T.DIFF2=2 GROUP BY T.USERID
DROP TABLE IF EXISTS TEST -- 删除测试表
实验截图
输出效果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)