@Elad Meidar, tôi thích câu hỏi của bạn và tôi đã tìm ra giải pháp:
SELECT SUM(total_count) as total, value
FROM (
SELECT count(*) AS total_count, REPLACE(REPLACE(REPLACE(x.value,'?',''),'.',''),'!','') as value
FROM (
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.sentence, ' ', n.n), ' ', -1) value
FROM table_name t CROSS JOIN
(
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) n
WHERE n.n <= 1 + (LENGTH(t.sentence) - LENGTH(REPLACE(t.sentence, ' ', '')))
ORDER BY value
) AS x
GROUP BY x.value
) AS y
GROUP BY value
Đây là fiddle hoạt động đầy đủ: http://sqlfiddle.com/#!2/17481a/ 1
Trước tiên, chúng tôi thực hiện truy vấn để trích xuất tất cả các từ như đã giải thích tại đây
bởi @peterm (làm theo hướng dẫn của anh ấy nếu bạn muốn tùy chỉnh tổng số từ được xử lý). Sau đó, chúng tôi chuyển đổi nó thành một truy vấn phụ và sau đó chúng tôi COUNT
và GROUP BY
giá trị của mỗi từ, sau đó thực hiện một truy vấn khác trên đầu từ đó tới GROUP BY
không nhóm các trường hợp có thể có các dấu hiệu đi kèm. tức là:xin chào =xin chào! với REPLACE