귀하의 질문은 이해하기 어렵지만, "이름"열이있는 테이블이 있고 그 열 안에는 각 셀에 세미콜론으로 구분 된 여러 값이 들어 있다고 생각합니다. 각 행에서 세미콜론으로 구분 된 값의 수를 계산하려고합니다.
PLSQL string functions이 여기에 도움이 될 수 있지만 실제로이 작업을 수행하는 프로그램 코드를 작성하는 것에 대해 이야기하고 있습니다. (일반적으로 데이터베이스 쿼리 언어에서는 작동하지 않습니다.) 예를 들어, 세미콜론의 수를 계산 this trick를 사용하고 하나를 추가 할 수 있습니다
LENGTH(name) - LENGTH(TRANSLATE(name,'x;','x')) + 1
을하지만 @Johan이 제작되는 지점이 당신의 데이터를 구조화하는 나쁜 방법이라는 것이다. 예를 들어 이름으로 제대로 조회 할 수 없습니다. 이름이 "smith"
이 아니기 때문에 where name == "smith"
이라고 할 수는 없습니다. "smith;black;tiger"
과 같습니다. where name like "smith"
이라는 하위 문자열 검색을 수행해야하며 이는 비효율적이며 잘못 될 것입니다. 내가 "smi"라는 이름을 찾아달라고하면 어떻게 될까? where name like "smi"
이라고 말하면 그 결과를 잘못 찾습니다. "smith"는 테이블에 있지만 "smi"는 그렇지 않습니다. 왜냐하면 둘 다 "smith; black; tiger"의 부분 문자열이기 때문입니다.
항목이 여러 개의 이름을 갖게하려면 훨씬 더 나은 해결책입니다. 항목에 고유 한 ID를 부여하는 것입니다. 123 (SQL에 테이블 행에 대한 고유 ID를 자동으로 생성하도록 요청할 수 있습니다.) 그런 다음 해당 행으로 다시 매핑되는 이름에 대해 별도의 테이블을 보유하십시오. 아이디 (123)과 행 그래서 당신은 "호랑이; 블랙 스미스를"준 말 "X를, y는"이제 두 개의 열이 다른 테이블 NameMap
을했을 ID 124 행 : 이제
name | entry
------------------
smith | 123
black | 123
tiger | 123
x | 124
y | 124
당신이 볼 수 이름을 테이블에 맵핑하고이를 조인과 함 2 이름 항목 테이블에 맵핑하십시오.
그리고 당신은 당신의 질문에 대답 할 수 있습니다 :
데이터베이스 열에서
SELECT name, count(*) as value_count FROM NameMap GROUP BY name
CSV 아주 나쁜 :이 같은 GROUP BY 문 "항목 테이블의 각 행에 해당 얼마나 많은 이름" 생각. 그것은 표준화되지 않았습니다, 느립니다, 당신은 인덱스를 사용할 수없고 조인은 고통입니다. 절대로하지 마십시오. – Johan
데이터베이스 플랫폼은 무엇입니까? – harpo
데이터베이스 테이블에 "첫 번째 행"이 없습니다. 주문은 결코 보장되지 않습니다. –