2보다 큰 MySQL 수 발생


91

다음과 같은 테이블 구조가 있습니다.

+  id  +  word  +
+------+--------+

테이블은 주어진 텍스트의 소문자로 된 단어로 채워 지므로 텍스트는

안녕 안녕 안녕

결과적으로

+  id  +  word  +
+------+--------+
+   1  + hello  +
+------+--------+
+   2  + bye    +
+------+--------+
+   3  + hello  +
+------+--------+

테이블에서 두 번 이상 반복되는 단어 수를 반환하는 SELECT 쿼리를 만들고 싶습니다 (예 : hello).

SELECT COUNT(id) FROM words WHERE (SELECT COUNT(words.word))>1

물론 테이블이 클 때 너무 잘못되고 과부하가 걸립니다. 그러한 목적을 달성하는 방법에 대한 아이디어가 있습니까? 위의 주어진 예에서 1


"처진"로프 다리와 같은 밑줄을 본 사람이 있습니까?
방울

답변:


228

발생 빈도와 함께 두 번 이상 나타나는 단어 목록을 얻으려면 GROUP BY 및 HAVING의 조합을 사용하십시오.

SELECT word, COUNT(*) AS cnt
FROM words
GROUP BY word
HAVING cnt > 1

위의 결과 집합에서 단어 수를 찾으려면이를 하위 쿼리로 사용하고 외부 쿼리의 행을 계산합니다.

SELECT COUNT(*)
FROM
(
    SELECT NULL
    FROM words
    GROUP BY word
    HAVING COUNT(*) > 1
) T1

1
애드온으로, "갖고있는"에서도 별칭을 사용할 수 있습니다. 단어 HAVING CNT BY (*) AS CNT 단어에서 GROUP SELECT 말처럼, COUNT> 1
하기 Vaibhav 자이나교

17
SELECT count(word) as count 
FROM words 
GROUP BY word
HAVING count >= 2;

CodeIgniter도 지원하므로 완벽했습니다. 감사합니다
배 원준

6

SELECT word, COUNT(*) FROM words GROUP by word HAVING COUNT(*) > 1

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.