order by (PostgreSql, MariaDB)

2023. 1. 18. 09:51daliy

queryDsl에서 조회 쿼리와 count() 쿼리의 공통 부분을 같이 쓰려고 작업하던 중 발견하게 되었다.

PostgreSql은 count() 쿼리에서 order by 구문이 있으면 group by가 필요하다는 오류가 발생한다.
count() 쿼리에서 order by 구문이 필요하지 않지만,
MariaDB에서는 order by 구문이 있어도 쿼리가 실힝되었던 터라 이상함을 느꼈다.

-- PostgreSql -> SQL Error [42803]
select count(*)
    from test
    order by id desc
;

-- MariaDB -> 실행
select count(*)
    from test
    order by id desc
;

검색하고 여러 방법을 시도해본 결과,
MariaDB에서는 테이블 내의 컬럼이라면 select 하지 않더라도 쿼리가 실행된다.

PostgreSql은 select 하지 않은 컬럼을 order by로 정렬하면 오류가 발생한다.
그러나 count() 컬럼에 alias로 order by를 사용하면 쿼리가 동작하였다.


-- MariaDB -> abc 컬럼이 없는 경우, SQL Error [42703]
select count(*)
    from test
    order by abc desc
;

-- MariaDB -> 실행
select count(*) as abc
    from test
    order by abc desc
;

-- PostgreSql -> 실행
select count(*) as abc
    from test
    order by abc desc
;

'daliy' 카테고리의 다른 글

@JoinColumn(nullable) & @OneToOne(optional)  (0) 2023.01.25
Controller & Service & Repository role setting  (0) 2023.01.19
fetchOne(), fetchFirst()  (0) 2023.01.17