SQL: '좋아요' 함수의 결과에 따라 '그룹화'가 가능합니까?
Oracle SQL을 사용하고 있는데 함수 결과가 '좋아요'인 다른 행들을 그룹화하고 싶습니다.예를 들어 설명하자면:
제가 테이블 MESA를 가지고 있다고 가정해 보겠습니다. 열 중 하나가 큰 문자열입니다.그리고 특정 패턴과 일치하는 행의 수를 세고 있습니다.
SELECT m.str, count(*)
FROM MESA m
WHERE m.str LIKE '%FRUIT%'
AND (m.str LIKE '%APPLE%' OR m.str LIKE '%ORANGE%')
따라서 이 쿼리의 결과를 다음과 같이 가정합니다.
과일..afsafafasfaasfa...RED_APPLE 20
과일..afsafafasfaasfa...YELLOW_APPLE
과일..afsafafasfaasfa...그린_APPLE 3
과일..afsafafasfaasfa...퍼플_오렌지 4
과일..afsafafasfaasfa...RED_ORANGE 45
하지만 결과는 다음과 같습니다.
애플 35
ORANGE 49
이게 가능한가요?만약 그렇다면, 어떻게? :)
댓글과 코드 스니펫은 대단히 감사합니다.
추신: 물론 질의와 결과는 위의 예시보다 더 복잡합니다.그냥 설명의 단순성을 위해서 그렇게 썼어요.
건배..
물론입니다.
WITH Fruits AS (
SELECT
CASE
WHEN m.str LIKE '%APPLE%' THEN 'Apple'
WHEN m.str LIKE '%ORANGE%' THEN 'Orange'
END AS FruitType
FROM MESA m
WHERE m.str LIKE '%FRUIT%')
SELECT FruitType, COUNT(*)
FROM Fruits
WHERE FruitType IN ('Apple', 'Orange')
GROUP BY FruitType;
데이비드 마클의 또 다른 답변:
SELECT
fruit_name,
count(1) as fruit_count
FROM (
SELECT
CASE
WHEN m.str LIKE '%APPLE%' THEN 'Apple'
WHEN m.str LIKE '%ORANGE%' THEN 'Orange'
END as fruit_name
FROM
MESA m
WHERE
m.str LIKE '%FRUIT%'
AND
(m.str LIKE '%APPLE%' OR m.str LIKE '%ORANGE%')
)
GROUP BY
fruit_name
동일하지만 필요한 경우는 단 한 가지뿐이므로 지원이 단순화됩니다.
SELECT count(*) AS 'Apples'
FROM MESA m
WHERE m.str LIKE '%FRUIT%'
AND m.str LIKE '%APPLE%'
SELECT count(*) AS 'Oranges'
FROM MESA m
WHERE m.str LIKE '%FRUIT%'
AND m.str LIKE '%ORANGE%'
그게 가능할까요?
이런 거?
SELECT Fruit,
SUM(counter)
FROM ( SELECT CASE
WHEN m.str LIKE '%APPLE%'
THEN 'APPLE'
ELSE 'ORANGE'
END AS Fruit
COUNT(*) AS counter
FROM MESA m
WHERE m.str LIKE '%FRUIT%'
AND (m.str LIKE '%APPLE%' OR m.str LIKE '%ORANGE%')
GROUP BY m.str
)
GROUP BY Fruit
이런 식으로 하겠습니다. 과일 종류를 추가하기 위해서는 단 한 번의 변경만 필요합니다.
WITH fruits AS (
SELECT 'APPLE' fruit FROM DUAL
UNION ALL
SELECT 'ORANGE' fruit FROM DUAL
)
SELECT fruit, count(*)
FROM MESA m, fruits
WHERE m.str LIKE '%FRUIT%'
AND m.str LIKE '%' || fruits.fruit || '%'
GROUP BY fruit
만약 당신의 문자열이 당신의 샘플 데이터에서 당신이 보여준 형식으로 확실하다면, 나는 술어를 한가지 조건으로 바꾸는 것을 고려할 것입니다.WHERE m.str LIKE 'FRUIT%' || fruits.fruit ||'%'
.
언급URL : https://stackoverflow.com/questions/3299330/sql-is-it-possible-to-group-by-according-to-like-functions-results
'programing' 카테고리의 다른 글
파괴된 보기 사용 시도: 변경사항 탐지 (0) | 2023.11.06 |
---|---|
쿼리 인덱스를 최적화하는 이상한 동작(MariaDB + InnoDB) (0) | 2023.11.06 |
Android 시스템에서 C/C++ 프로그램을 컴파일하여 실행하는 방법 (0) | 2023.11.06 |
jQuery의 부모에서 모든 자녀(어떤 수준이든)를 선택하는 방법? (0) | 2023.11.06 |
SQL 인젝션을 통해 사이트가 해킹당했습니다. (0) | 2023.11.06 |