복붙노트

[SQL] MySQL과 PostgreSQL을에 절, PostgreSQL을에 왜 오류에 의해 그룹?

SQL

MySQL과 PostgreSQL을에 절, PostgreSQL을에 왜 오류에 의해 그룹?

나는이 테이블이 있다고 가정 : 이름 = the_table 그 구조는 다음과 같다 :

PostgreSQL을 :

 create table the_table (col3 SERIAL, col2 varchar, col1 varchar, PRIMARY KEY(col3));

MySQL은 :

create table the_table ( col3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, col2 varchar(20), col1 varchar(20) )

그럼 난 테이블을 삽입 :

INSERT INTO the_table (col2,col1) VALUES 
('x','a'),
('x','b'),
('y','c'),
('y','d'),
('z','e'),
('z','f');

이제 테이블은 다음과 같다 :

col3 | col2 | col1 
------+------+------
    1 | x    | a
    2 | x    | b
    3 | y    | c
    4 | y    | d
    5 | z    | e
    6 | z    | f

나는이 쿼리를 수행 할 때 :

select * from the_table group by col2

다음 mysql을 내가 얻을 :

1 x a
3 y c
5 z e

과 PostgreSQL에서, 나는 오류를 얻고있다 :

ERROR:  column "the_table.col3" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select * from the_table group by col2;

내 질문 :

이 오류는 무엇을 의미합니까? 집계 함수는 무엇입니까?

이 MySQL의에서 작동 할 때, 왜 PostgreSQL의에서 작동하지 않을 수 있습니까?

해결법

  1. ==============================

    1.당신은 집계 함수를 사용해야합니다 :

    당신은 집계 함수를 사용해야합니다 :

    SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1
    FROM the_table 
    GROUP BY col2;
    

    DB <> 바이올린 데모

    과:

    그래서 명시 적 집계 기능이없는 MySQL 버전과는 undetermininistic 값으로 끝낼 수 있습니다. 난 강력하게 특정 집계 함수를 사용하는 것이 좋습니다.

    편집하다:

    MySQL의에서 GROUP BY의 취급 :

    예:

    SELECT o.custid, c.name, MAX(o.payment)
    FROM orders AS o
    JOIN customers AS c
      ON o.custid = c.custid
    GROUP BY o.custid;
    
  2. ==============================

    2.또한 MySQL의 대답에 : 그것은 이후 5.7 버전에서 작동하지 않을 것입니다.

    또한 MySQL의 대답에 : 그것은 이후 5.7 버전에서 작동하지 않을 것입니다.

    MySQL의 문서에 명시된대로 ANY_VALUE () 함수를 사용할 수 있습니다.

    출처 : https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_any-value

    예:

    SELECT MIN(col1), col2, ANY_VALUE(col3) FROM the_table GROUP BY col2
    
  3. ==============================

    3.그것을 사용하십시오 :

    그것을 사용하십시오 :

    select DISTINCT ON ( col2 ) col2, col1, col3 from the_table
    

    내 결과 :

    "x";"a";1
    "y";"c";3
    "z";"e";5
    
  4. from https://stackoverflow.com/questions/33629168/group-by-clause-in-mysql-and-postgresql-why-the-error-in-postgresql by cc-by-sa and MIT license