文件函数
SUBSTRING_INDEX

SELECT
SUBSTRING_INDEX(profile, ',', -1) AS gender,
COUNT(*) AS number
FROM
user_submit
GROUP BY
SUBSTRING_INDEX(profile, ',', -1);
解析:
1. SUBSTRING_INDEX(profile, ',', -1)
-
这个函数的作用是从字符串中提取一部分
-
参数1:profile – 要处理的字段(表中的列)
-
参数2:',' – 按照逗号分隔
-
参数3:-1 – 取最后一个部分
-
效果:"180cm,75kg,27,male" → "male"
-
SUBSTRING_INDEX函数基础
这个函数就像切蛋糕:
SUBSTRING_INDEX(字符串, 分隔符, 数字)
规则:
-
如果数字是正数:从左往右数,取前N块
-
如果数字是负数:从右往左数,取后N块
2. AS gender
-
给提取出来的性别数据起个别名叫gender
3. COUNT(*) AS number
-
统计每个性别有多少条记录
-
AS number:给统计结果起个别名叫number
4. GROUP BY SUBSTRING_INDEX(profile, ',', -1)
-
按照性别分组,相同性别的记录会分到一组
-
这样COUNT(*)就能分别统计每个性别的人数了
例2

SELECT
device_id,
SUBSTRING_INDEX(blog_url, '/', -1) AS user_name
FROM
user_submit;
1.SUBSTRING_INDEX(blog_url, '/', -1)
-
这个函数用于从字符串中提取指定分隔符的部分
-
第一个参数:blog_url – 要处理的字段
-
第二个参数:'/' – 按照斜杠进行分隔
-
第三个参数:-1 – 取最后一个部分(负号表示从后面开始数)
-
效果:
-
"http:/url/bisdgboy777" → "bisdgboy777"
-
"http:/url/dkittycc" → "dkittycc"
-
2. AS user_name
-
给提取出来的用户名起个别名叫user_name

SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(profile, ',', 3), ',', -1) AS age,
COUNT(*) AS number
FROM
user_submit
GROUP BY
SUBSTRING_INDEX(SUBSTRING_INDEX(profile, ',', 3), ',', -1)
ORDER BY
age DESC;
1. SUBSTRING_INDEX(SUBSTRING_INDEX(profile, ',', 3), ',', -1)
这是一个嵌套函数,分两步提取年龄:
第一步: SUBSTRING_INDEX(profile, ',', 3)
-
按逗号分隔profile字段
-
取前3部分
-
效果:"180cm,75kg,27,male" → "180cm,75kg,27"
第二步: SUBSTRING_INDEX(第一步结果, ',', -1)
-
对上一步的结果再按逗号分隔
-
取最后一部分
-
效果:"180cm,75kg,27" → "27"
合并效果:直接提取出年龄数字
2. AS age
-
给提取出来的年龄数据起个别名叫age
3. COUNT(*) AS number
-
统计每个年龄有多少条记录
-
AS number:给统计结果起个别名叫number
4. GROUP BY …
-
按照提取出来的年龄分组,相同年龄的记录会分到一组
5. ORDER BY age DESC
-
按照年龄降序排列(从大到小)



