sql >> Databasteknik >  >> RDS >> Mysql

MySQL sortera efter antal förekomster

Frågan nedan kan ge dig antalet förekomster av strängar som visas i båda kolumnerna, dvs. text och ämne och kommer att sortera resultat efter kriterierna, men detta kommer inte att vara en bra lösning prestandamässigt, det är bättre att sortera resultaten i din applikationskodnivå

SELECT *,
(LENGTH(`Text`) - LENGTH(REPLACE(`Text`, 'Keyword', ''))) / LENGTH('Keyword')
+
(LENGTH(`Subject`) - LENGTH(REPLACE(`Subject`, 'Keyword', ''))) / LENGTH('Keyword') `occurences`
 FROM 
`Table`
 WHERE (Text LIKE '%Keyword%' OR Subject LIKE '%Keyword%')
ORDER BY `occurences`  DESC

Fiddle Demo

Föreslagen av @lserni ett renare sätt att beräkna händelser

SELECT *,
(LENGTH(`Text`) - LENGTH(REPLACE(`Text`, 'test', ''))) / LENGTH('test') `appears_in_text`,

(LENGTH(`Subject`) - LENGTH(REPLACE(`Subject`, 'test', ''))) / LENGTH('test') `appears_in_subject`,

(LENGTH(CONCAT(`Text`,' ',`Subject`)) - LENGTH(REPLACE(CONCAT(`Text`,' ',`Subject`), 'test', ''))) / LENGTH('test') `occurences`
 FROM 
`Table1`
 WHERE (TEXT LIKE '%test%' OR SUBJECT LIKE '%test%')
ORDER BY `occurences`  DESC

Fiddle Demo 2



  1. Hitta det maximala antalet år i följd för varje ID i en tabell (Oracle SQL)

  2. Docker-composes mariadb kan inte starta om efter ändring (exitkod 1)

  3. MAMP Pro mysql kan inte starta

  4. JPA Hibernate - kaskadradering i både databas och anteckning