programing

Postgre와 같은 MYSQL 배열 Aggregate 함수SQL array_agg

muds 2023. 10. 3. 11:36
반응형

Postgre와 같은 MYSQL 배열 Aggregate 함수SQL array_agg

MYSQL에 대한 표가 두 개 있는데, mYSQL에 array_agg() FROM postgre와 같이 aggregate 함수가 있는지 궁금합니다.SQL 입니다.

표 1 속성 속성을 캡처한 레코드는 8개뿐입니다. 따라서 동일한 속성에 대해 1회 또는 n회가 될 수도 있으며, 이 Qry를 받았습니다.

SELECT p.id, pcb.users_admin_id as uid
FROM properties p
INNER JOIN prop_captured_by pcb ON p.id = pcb.property_id
-- GROUP BY p.id

id    uid
200   1
200   80
202   1
202   80
211   1
211   10
211   81
215   10 ...

GROUP by part를 사용하면 다음과 같은 결과를 얻을 수 있습니다.

id    uid
200   1
202   1
211   1
215   10 ...

users_admin_id에 대한 첫 번째 값 이외의 다른 데이터가 손실됩니다.postgre의 array_agg() 함수로 원하는 결과를 얻을 수 있다는 것을 알고 있습니다.SQL인데 MYSQL에서 어떻게 하는지 모르겠어요.

이것이 나의 욕망입니다 결과:

id    uid
200   1,80 //an array, I don't mind about the separator, could be anything.
202   1,80
211   1,10,81
215   10 ...

UNION, GROUP BY, INNER JOUNE을 시도했지만 운이 없었습니다.조언 좀 해주세요.

갱신하다

저는 이 남자의 많은 관계를 이용하고 있습니다.다른 사람에게 유용하기를 바랍니다.세 번째 테이블에서 사용자 이름을 추가해야 했기 때문에 최종 쿼리는 다음과 같습니다.

SELECT p.id, group_concat(pcb.users_admin_id) as uid, group_concat(ua.name) as uin
FROM properties p
INNER JOIN prop_captured_by pcb ON p.id = pcb.property_id
INNER JOIN users_admin ua ON ua.id = pcb.users_admin_id
group by p.id;

사용하고 싶으십니다.GROUP_CONCAT()맘에 들다

SELECT p.id, group_concat(pcb.users_admin_id) as uid
FROM properties p
INNER JOIN prop_captured_by pcb 
ON p.id = pcb.property_id
group by p.id;

MySQL 5.7.22 도입JSON_ARRAYAGG()그리고.JSON_OBJECTAGG(). 사용자 이름도 원하므로 후자를 사용할 수 있습니다.

SELECT p.id, JSON_OBJECTAGG(pcb.users_admin_id, ua.name) as uin
FROM properties p
INNER JOIN prop_captured_by pcb ON p.id = pcb.property_id
INNER JOIN users_admin ua ON ua.id = pcb.users_admin_id
group by p.id;

DB Fiddle

당신이 원하는 것 같아요.group_concat():

SELECT p.id, GROUP_CONCAT(pcb.users_admin_id) as uids
FROM properties p INNER JOIN
     prop_captured_by pcb
     ON p.id = pcb.property_id
GROUP BY p.id;

이렇게 하면 쉼표로 구분된 문자열이 생성되지만 MySQL에서 얻을 수 있는 배열과 유사합니다.

언급URL : https://stackoverflow.com/questions/39030090/mysql-array-aggregate-function-like-postgresql-array-agg

반응형