반응형
Mysql은 부분 문자열의 인스턴스 수를 계산한 다음 다음 순서대로 정렬합니다.
내 SQL에 다음과 같은 문제가 있습니다.
- mySQL 데이터베이스의 문자열 필드에서 부분 문자열의 인스턴스 수
- 해당 부분 문자열(DESC)의 발생 횟수에 따라 결과 순서 지정
저는 초보적인 질문 말고는 한 번도 해본 적이 없습니다.다른 곳에서는 해결책을 찾을 수가 없습니다.
SELECT (CHAR_LENGTH(str) - CHAR_LENGTH(REPLACE(str, substr, ''))) / CHAR_LENGTH(substr) AS cnt
...
ORDER BY cnt DESC
네, 더부룩해 보이는데 다른 해결책이 없는 것 같아요.
mysql> select (CHAR_LENGTH('asd') - CHAR_LENGTH(REPLACE('asd', 's', ''))) / CHAR_LENGTH('s');
+-----------------------------------------------------------------+
| (CHAR_LENGTH('asd') - CHAR_LENGTH(REPLACE('asd', 's', ''))) / CHAR_LENGTH('s') |
+-----------------------------------------------------------------+
| 1.0000 |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select host, (CHAR_LENGTH(host) - CHAR_LENGTH(REPLACE(host, 'l', ''))) / CHAR_LENGTH('l') AS cnt from user;
+-----------+--------+
| host | cnt |
+-----------+--------+
| 127.0.0.1 | 0.0000 |
| honeypot | 0.0000 |
| honeypot | 0.0000 |
| localhost | 2.0000 |
| localhost | 2.0000 |
+-----------+--------+
5 rows in set (0.00 sec)
DELIMITER //
DROP FUNCTION IF EXISTS `subStringCount`//
CREATE FUNCTION `subStringCount` (sequence VARCHAR(1000), word VARCHAR(100)) RETURNS INT(4)
DETERMINISTIC
CONTAINS SQL
BEGIN
DECLARE counter SMALLINT UNSIGNED DEFAULT 0;
DECLARE word_length SMALLINT UNSIGNED;
SET word_length = CHAR_LENGTH(word);
WHILE (INSTR(sequence,word) != 0) DO
SET counter = counter+1;
SET sequence = SUBSTR(sequence, INSTR(sequence,word)+word_length);
END WHILE;
RETURN counter;
END //
DELIMITER ;
다음을 호출하여 실행할 수 있습니다.
SELECT sum(subStringCount(fieldName,'subString')) FROM `table` WHERE 1
언급URL : https://stackoverflow.com/questions/5427467/mysql-count-instances-of-substring-then-order-by
반응형
'programing' 카테고리의 다른 글
| CSS 테이블 셀 등폭 (0) | 2023.09.07 |
|---|---|
| 인라인 CSS로 의사 요소를 사용하기 전과 후 CSS ::를 사용하는 것? (0) | 2023.09.07 |
| sql을 사용하여 유형 시간의 합을 계산합니다. (0) | 2023.09.07 |
| 입니까?입니까?입니까? (0) | 2023.09.02 |
| jQuery AJAX 호출이 돌아오기 전에 취소하시겠습니까? (0) | 2023.09.02 |