네 개의 테이블에서 선택하고 일부 결과를 하나의 열로 그룹화
스포츠_게임 테이블
==========================================================================
| game_id | team_id | game_type | time_started | time_ended | planned_by |
|========================================================================|
| 1 | 1 | 1 | 1640799417 | 1641146196 | 1 |
| 2 | 2 | 1 | 1640971535 | 1641579516 | 1 |
| 3 | 1 | 2 | 1640971553 | 1641582723 | 8 |
| 4 | 2 | 2 | 1640971585 | 1641404242 | 9 |
| 5 | 3 | 4 | 1641061431 | 1641754479 | 12 |
==========================================================================
위의 표와 아래의 표를 결합할 수 있었습니다.
game_types 테이블
==============================
| game_type | game_type_name |
|============================|
| 1 | football |
| 2 | baseball |
| 3 | golf |
| 4 | tennis |
==============================
다음 SQL과 함께
SELECT *
FROM sport_games
INNER JOIN game_types
ON sport_games.game_type = game_types.game_type
하지만, 저는 지금 제 자신이 이리저리 돌아다니며, 잠재적인 해결책을 차례로 시도하고 있다는 것을 발견하고 있습니다.두 표의 데이터를 더 포함해야 합니다.participents
그리고.user_basic
.
그participents
테이블은 단순히 그것을 가지고 있습니다.game_id
그리고.user_id
열, 참가자당 하나의 행, 둘 다 결합되어 기본 키가 되는 열 및 내부user_basic
테이블, 찾을 수 있습니다.user_id
그들과 함께user_name
.
를 위해planned_by
첫 번째 표의 열, 이것 또한user_id
나는 그들의 사용자 이름도 얻고 싶습니다.
모든 참가자들과 함께, 저는 그들이 게임별로 그룹화된 한 칸 안에 있기를 바랍니다.
내가 시도한 것들
group_concat( .. )
아마도 제가 이것을 완전히 잘못 사용하고 있었을 것입니다. 저는 다른 테이블의 전체 결과 집합을 그룹화하는 것만 달성할 수 있었고 결합에서 이것을 올바르게 사용하는 방법을 파악할 수 없었던 것 같습니다.STRING_AGG( ... )
처음에는 5.5 MariaDB에서 실행할 때 이 기능을 사용할 수 없었기 때문에 업데이트하기가 쉽지 않았습니다.지금은 MariaDB 10.3을 사용하고 있지만, 스택 오버플로 등을 여러 번 겪었음에도 불구하고 이 작업에 사용할 수 있는 가장 간단한 기능을 아직도 얻을 수 없는 것 같습니다.
저는 약간 막막한 느낌이 듭니다, 제가 앞으로 나아가는 것처럼 보이는 어떤 진전도, 저는 두 걸음 뒤로 물러납니다!그리고 다음은 그것을 사용하는 것입니다.JOIN
이 중에서, 저는 제가 저를 올바른 경로에 배치하기 위해 제 검색을 표현하고 있는지 잘 모르겠습니다. 그래서 제 질문 제목이 지금 약간 모호할 수도 있습니다. 만약 그렇다면 죄송합니다! - 다른 제안을 해주세요, 감사합니다.
원하는 결과의 예
"2": { // <- game_id
"game_type": 2,
"game_type_name": "baseball",
"participants": {
"1": "username_1",
"2": "username_21",
"3": "username_3",
"4": "username_4",
},
"time_started": 1641061431,
"time_completed": 1641754479,
"planned_by": {
"851730": "username_1",
}
}
테이블과 테이블을 올바르게 결합해야 합니다.user_basic
두 번: 참가자와 게임을 계획한 사용자를 가져옵니다.
MariaDB 10.5+의 경우 다음을 사용할 수 있습니다.JSON_ARRAYAGG()
:
SELECT sg.game_id,
sg.game_type,
gt.game_type_name,
JSON_ARRAYAGG(JSON_OBJECT(ub.user_id, ub.user_name)) participants,
sg.time_started,
sg.time_ended,
JSON_OBJECT(sg.planned_by, pb.user_name) planned_by
FROM sports_games sg
INNER JOIN user_basic pb ON pb.user_id = sg.planned_by
INNER JOIN game_types gt ON gt.game_type = sg.game_type
INNER JOIN participents p ON p.game_id = sg.game_id
INNER JOIN user_basic ub ON ub.user_id = p.user_id
GROUP BY sg.game_id;
이전 버전의 경우 사용GROUP_CONCAT()
:
SELECT sg.game_id,
sg.game_type,
gt.game_type_name,
CONCAT('{', GROUP_CONCAT(ub.user_id, ' : ', ub.user_name SEPARATOR ', '), '}') participants,
sg.time_started,
sg.time_ended,
CONCAT('{', GROUP_CONCAT(DISTINCT sg.planned_by, ' : ', pb.user_name), '}') planned_by
FROM sports_games sg
INNER JOIN user_basic pb ON pb.user_id = sg.planned_by
INNER JOIN game_types gt ON gt.game_type = sg.game_type
INNER JOIN participents p ON p.game_id = sg.game_id
INNER JOIN user_basic ub ON ub.user_id = p.user_id
GROUP BY sg.game_id;
데모를 참조하십시오.
아이즈time_ready
기존 열 또는 다른 열에서 계산된 열?안 보여…time_ready
제공된 표 중 하나에 표시됩니다.
SELECT
game_types.game_type
, game_types.game_type_name
, participents.user_id
, user_basic.user_name
, sports_games.time_started
, sports_games.time_ended AS time_completed
, sports_games.planned_by
FROM sports_games
INNER JOIN game_types
ON sports_games.game_type = game_types.game_type
INNER JOIN participents
ON sports_games.game_id = participents.game_id
INNER JOIN user_basic
ON participants.user_id = user_basic.user_id
ORDER BY
game_types.game_type
언급URL : https://stackoverflow.com/questions/71099379/selecting-from-four-tables-and-grouping-some-results-into-one-column
'source' 카테고리의 다른 글
python에서 한 항목을 제외한 모든 항목 인덱싱 (0) | 2023.07.09 |
---|---|
시스템 테이블 마스터의 목적은 무엇입니까?spt_values 및 그 값의 의미는 무엇입니까? (0) | 2023.07.09 |
파이썬에서 "continue" 문을 사용하는 예는 무엇입니까? (0) | 2023.07.09 |
Angular2 Types 스크립트에서 HTML 요소 읽기 전용 및 필수 속성을 변경하는 방법은 무엇입니까? (0) | 2023.07.09 |
패턴별로 파일을 재귀적으로 추가합니다. (0) | 2023.07.09 |