sourcetip

PL/SQL에서 매일 그룹화하는 방법은?

fileupload 2023. 9. 20. 20:39
반응형

PL/SQL에서 매일 그룹화하는 방법은?

저는 PL/SQL로 각 일별 통계를 얻으려고 노력하고 있습니다.

하루에 몇 개의 입력, 오류의 버킷 :-) 요일별로 그룹화하고 싶습니다.

현재 수행 중인 작업:

SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY MONTH, DAY, errormessage

그러면 ORA-00904: "DAY": 잘못된 식별자가 나타납니다(그룹에서 다음 시간까지).

도움이 필요하신가요? :D

SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY TO_CHAR(dateTime, 'DD'), TO_CHAR(dateTime, 'MM'), errormessage

열 별칭은 다음에 적합하지 않습니다.GROUP BY, 당신은 완전한 표현이 필요합니다.

당신의 문제는 스코프 문제입니다.GROUP BY조항은 문장의 표 표현의 일부이므로 따라서 다음에 앞서 평가됩니다.SELECT절, 즉 투영.즉, 그룹화 시에 예상된 별칭을 사용할 수 없습니다.이것이 하나의 해결책입니다.

SELECT DAY, MONTH, errormessage
FROM (
  SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
  FROM log
  WHERE (...)
)
GROUP BY MONTH, DAY, errormessage

이것은 또 다른 것입니다.

SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY TO_CHAR(dateTime, 'MM'), TO_CHAR(dateTime, 'DD'), errormessage

비표준적 행위

일부 데이터베이스(MySQL, Postgre 포함)를 참고합니다.SQL 등)에서 의 프로젝션에서 열 별칭을 참조할 수 있습니다.GROUP BY더 엄격한 SQL 방언(예: Oracle)에서는 불가능합니다.

SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP by TO_CHAR(dateTime, 'DD'), TO_CHAR(dateTime, 'MM'), errormessage

그룹에서 별칭을 사용할 수 없습니다.

언급URL : https://stackoverflow.com/questions/10123202/how-to-group-by-each-day-in-pl-sql

반응형