sql >> Databáze >  >> RDS >> Mysql

Počítání počtu shodných slov

Nejsem si jistý, zda je to lepší způsob, ale udělal bych to takto:

SELECT d.id, d.word, LEFT(d.description, 100) description,
  COALESCE(sum(v.vote), 0) votecount,
    (CONCAT(word, description, `usage`) LIKE '%George%')
  + (CONCAT(word, description, `usage`) LIKE '%Tabuki%')
  + (CONCAT(word, description, `usage`) LIKE '%Street%')
  + (CONCAT(word, description, `usage`) LIKE '%Fighter%')
  + (CONCAT(word, description, `usage`) LIKE '%Miley%')
  + (CONCAT(word, description, `usage`) LIKE '%Cyrus%') `match`
FROM definition d
LEFT JOIN vote v ON v.definition_id = d.id
GROUP BY d.id
HAVING `match` > 0
ORDER BY `match` DESC, votecount DESC

Pokud jsou řetězce dostatečně dlouhé, může opakované zřetězení trvat déle než vytvoření odvozené tabulky (nepravděpodobné, ale stojí za to to zkusit):

SELECT id, word, description, votecount,
    (fullDesc LIKE '%George%')
  + (fullDesc LIKE '%Tabuki%')
  + (fullDesc LIKE '%Street%')
  + (fullDesc LIKE '%Fighter%')
  + (fullDesc LIKE '%Miley%')
  + (fullDesc LIKE '%Cyrus%') `match`
FROM (
  SELECT d.id, d.word, LEFT(d.description, 100) description,
    COALESCE(sum(vote), 0) votecount, CONCAT(word, description, `usage`) fullDesc
  FROM definition d
  LEFT JOIN vote v ON v.definition_id = d.id
  GROUP BY d.id
) s
HAVING `match` > 0
ORDER BY `match` DESC, votecount DESC



  1. Jak optimalizovat výkon COUNT(*) na InnoDB pomocí indexu

  2. Jak použít proměnnou pro název databáze v T-SQL?

  3. Nejjednodušší způsob testování uložené procedury Oracle

  4. Způsobeno:java.sql.SQLException:Přístup odepřen uživateli 'root'@'localhost' (pomocí hesla:ANO)