一、背景说明
移动运营商可以提供多种不同的移动服务套餐给客户,每个套餐都有其独特的描述、价格以及用户满意度评分。为了更好地了解市场反应并优化产品组合,我们需要对现有的套餐进行分析,找出那些被用户认为“优质”且具有奇数ID的套餐。这里,“优质”的定义是该套餐的描述不包含“boring”这个词,最终结果将按用户满意度从高到低排序。下面将以 梧桐数据库的实现为例,给大家讲解实现思路。
二、表结构说明
-- 移动服务套餐表建表语句
CREATE TABLE packages (id INT PRIMARY KEY COMMENT '套餐ID',package_name VARCHAR(255) NOT NULL COMMENT '套餐名称',description TEXT NOT NULL COMMENT '套餐描述',satisfaction_rating DECIMAL(3,2) NOT NULL COMMENT '用户满意度评分(0-10分)'
);
三、表数据插入
INSERT INTO packages (id, package_name, description, satisfaction_rating) VALUES
(1, '无限流量包', '享受无限制的数据使用量,适合重度网络使用者。', 9.2),
(2, '家庭共享包', '一个账号支持多个设备同时在线,非常适合家庭使用。', 8.7),
(3, '基础语音包', '提供基本的通话服务,适用于较少上网的用户。', 5.6),
(4, '国际漫游包', '为出国旅行者提供的特别优惠,包括国际通话和数据。', 8.4),
(5, '视频流媒体包', '专为喜欢在线观看电影和电视节目的用户设计。', 9.5),
(6, '经济实惠包', '价格亲民的基础套餐,满足日常通讯需求。', 6.8);
四、实现思路分解
- 筛选条件:首先根据题目要求,选择
description
中不含"boring"关键字的记录。 - 进一步筛选:接着,仅保留那些
id
为奇数的记录。 - 排序:最后,按照
satisfaction_rating
字段降序排列结果集,以确保最高评价的服务排在最前面。
五、SQL
代码实现
SELECT*
FROMpackages
WHEREdescription NOT LIKE '%boring%' -- 剔除description中包含'boring'的数据AND MOD ( id, 2 ) = 1 -- 通过mod函数,筛选出id为奇数的数据
ORDER BYsatisfaction_rating DESC; -- 按照satisfaction_rating降序排列
此SQL
查询语句通过结合使用LIKE
操作符来排除含有特定关键字的记录,利用数学函数MOD()
识别奇数ID,并通过ORDER BY
子句实现了所需的数据排序。这样就可以有效地获取到符合业务需求的数据集合。
执行结果如下:
id | package_name | description | satisfaction_rating |
---|---|---|---|
5 | 视频流媒体包 | 专为喜欢在线观看电影和电视节目的用户设计 | 9.50 |
1 | 无限流量包 | 享受无限制的数据使用量,适合重度网络使用者。 | 9.20 |
3 | 基础语音包 | 提供基本的通话服务,适用于较少上网的用户。 | 5.60 |