sql多對多查詢統計,一個主題多個關鍵字,一個關鍵字多個文章,一個文章多個關鍵字

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

最後結果




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章