1.開發中遇到個奇葩的問題,貌似數學集合的問題,糾結了半天后來解決。
1.1業務場景A主題表,一個主題有多個關鍵字,假設A表有一個主題主題人類,關鍵字爲猩猩,猴子。B表爲命中表,如一條記錄命中關鍵字猩猩,一條記錄命中猴子。
2爲了統計主題,所以將主題拆分爲一個主題對頂多條數據,以關鍵字拆分。
統計主題信息量:
SELECT t.`id`,t.`name`, i.`id`,COUNT(1) FROM theme t LEFT JOIN info i ON INSTR(i.`key_word`, t.`key_word`) GROUP BY t.id
問題來了:總計有3條數據,但是統計處理5條,命中多個關鍵字的信息被重複統計了,應過濾使用distinct
SELECT a.*, COUNT(1) FROM (
SELECT DISTINCT t.`id` AS tid,t.`name`, i.`id` FROM theme t LEFT JOIN info i ON INSTR(i.`key_word`, t.`key_word`)
)a GROUP BY a.tid
問題又來了,主題有信息的統計的正確,但是大象在信息表裏沒有出現,這是因爲left jon的特性決定的,再次改進使用sum方法
SELECT a.tid, a.name, SUM(a.cnt) FROM (
SELECT DISTINCT t.`id` AS tid,t.`name`, i.`id`,
(CASE WHEN i.`id` IS NULL THEN 0 ELSE 1 END) AS cnt
FROM theme t LEFT JOIN info i ON INSTR(i.`key_word`, t.`key_word`)
)a GROUP BY a.tid
最後結果