mysqlsum函数字段中存在汉字

mysqlsum函数字段中存在汉字,第1张

符以内的描述

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 -- 删除测试表

实验截图

输出效果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5901320.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存