【发布时间】:2020-06-14 19:42:04
【问题描述】:
我有一个包含以下数据的表(staffs_table);
name profession
------------------------------
Corbin Human Resources|Accountant
Cort Programmer|Receptionist|Helpdesk
我想统计每个职业的人数,以便我的结果如下;
profession number_of_staffs
---------------------------------------
Human Resources 1
Accountant 1
Programmer 1
Receptionist 1
Helpdesk 1
我尝试了以下 SQL 查询,但没有成功;
SELECT profession, COUNT(*) AS number_of_staffs FROM staffs_table GROUP BY profession ORDER BY COUNT(*) DESC;
输出:
profession number_of_staffs
---------------------------------------------
Human Resources|Accountant 1
Programmer|Receptionist|Helpdesk 1
还尝试了以下方法;
SELECT staffs_table.name,
SUBSTRING_INDEX(SUBSTRING_INDEX(staffs_table.profession, '|', numbers.n), '|', -1) profession
FROM
numbers INNER JOIN staffs_table
ON CHAR_LENGTH(staffs_table.profession)
-CHAR_LENGTH(REPLACE(staffs_table.profession, '|', ''))>=numbers.n-1
输出:
name profession
------------------------------
Corbin Human Resources
Corbin Accountant
Cort Programmer
Cort Receptionist
Cort Helpdesk
提前致谢!
【问题讨论】:
-
这能回答你的问题吗? SQL split values to multiple rows
-
指定你的 MySQL 版本。
-
修复你的数据模型!不要在单个列中存储多个值!
-
@AnkitBajpai 感谢您的回复。它是不同的。您引用的问题,仅在删除 '|' 后显示结果` 没有计数。我的问题是对计数感兴趣。
-
所以一旦你把它分成几行,你就可以触发一个 cont 函数来计算关键字。
标签: mysql sql group-by count substring