programing

SQL: '좋아요' 함수의 결과에 따라 '그룹화'가 가능합니까?

css3 2023. 11. 6. 21:58

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