programing

ID로 그룹화된 후 열 값을 기준으로 행을 카운트하는 방법

magicmemo 2023. 6. 20. 21:32
반응형

ID로 그룹화된 후 열 값을 기준으로 행을 카운트하는 방법

그룹화된 열 값을 기준으로 총 행 수를 반환하는 방법은 아래 코드에서 항목 소유권을 가진 개별 팀을 작업하고 인쇄하지만 total_member 수가 정확하지 않고 실제보다 약 10배 더 높은 경우와 같습니다.

내 코드는 다음과 같습니다.

SELECT
    team.team_name,
    team_rank.points,
    SUM(CASE WHEN items.item_id = 1 THEN items.count END) AS item1,
    SUM(CASE WHEN items.item_id = 2 THEN items.count END) AS item2,
    SUM(CASE WHEN items.item_id = 3 THEN items.count END) AS item3,
    SUM(CASE WHEN items.item_id = 4 THEN items.count END) AS item4,
    COUNT(member.team_id) AS total_members
FROM
    member
INNER JOIN 
    items ON member.obj_Id = items.owner_id
INNER JOIN 
    team ON team.team_id = member.team_id
JOIN 
    team_rank ON team.team_id = team_rank.team_id 
GROUP BY
    member.team_id 

아래는 현재 결과이고, 항목 계산은 맞지만, 실제로 팀 1은 19명, 팀 2는 5명이기 때문에 여러 번 곱한 것입니다.

table example

편집됨:

요청에 따라 fidle에 업로드된 데이터베이스 데이터의 예를 참조하십시오.https://www.db-fiddle.com/f/gwWCEa3vaPs1JTgBnwk1wM/0

내부 집계member갖기 위해total_members결과를 쿼리에 참여시킵니다.

SELECT
    team.team_name,
    team_rank.points,
    SUM(CASE WHEN items.item_id = 1 THEN items.count END) AS item1,
    SUM(CASE WHEN items.item_id = 2 THEN items.count END) AS item2,
    SUM(CASE WHEN items.item_id = 3 THEN items.count END) AS item3,
    SUM(CASE WHEN items.item_id = 4 THEN items.count END) AS item4,
    c.total_members
FROM member
INNER JOIN (SELECT team_id, COUNT(team_id) total_members FROM member GROUP BY team_id) c
ON c.team_id = member.team_id
INNER JOIN items ON member.obj_Id = items.owner_id
INNER JOIN team ON team.team_id = member.team_id
INNER JOIN team_rank ON team.team_id = team_rank.team_id 
GROUP BY member.team_id;

데모를 참조하십시오.

언급URL : https://stackoverflow.com/questions/73926392/how-to-count-rows-based-on-column-value-after-its-grouped-by-id

반응형