본문 바로가기
MySql

MySQL 열 수가 다른 두 쿼리 결합

by 베이스 공부 2021. 1. 23.
반응형

단일 출력으로 결합하려는 두 개의 쿼리가 있는데, 열 수가 다르기 때문에 UNIOn을 사용할 수 없습니다.

테이블은 id refid cellid cat 필드가있는 ref 이며 모두 전체를 포함합니다. 번호

쿼리 1 : 각 고유 한 cellid 에 대한 총 행 수를 찾습니다.

SELECT cellid, COUNT(*) totalcount, cat FROM rel GROUP BY cellid

쿼리 2 : 각 고유 한 cellid 에 대해 cat 의 모드 (가장 일반적인 값)를 찾습니다.

SELECT cellid, cat
FROM rel t
GROUP BY cellid, cat
HAVING cat = (
SELECT cat
FROM rel
WHERE cellid = t.cellid
GROUP BY cat
ORDER BY COUNT(*) DESC, cat
LIMIT 1
)

내가하려는 작업의 예를 제공하기 위해 내 테이블을 쿼리하고 싶습니다.

id | refid | cellid | cat
1  | 1     |  1     | 1
2  | 2     |  2     | 2
3  | 3     |  3     | 4
4  | 1     |  1     | 2
5  | 2     |  1     | 2
6  | 3     |  1     | 3
7  | 1     |  2     | 2
8  | 1     |  1     | 2

그리고 반환

cellid | no_of_rows | Mode_of_cat
 1     |  5         |  2
 2     |  2         |  2
 3     |  1         |  4

 

해결 방법

 

여기서 가장 쉬운 해결책은 이미 가지고있는 두 개의 결과 집합을 결합하는 쿼리를 작성하는 것입니다. 쿼리 결과를 임시 테이블에 저장하고 다음과 같이 임시 테이블을 조인 할 수 있습니다.

SELECT tmp1.cellid, tmp1.rows, tmp2.mode_cat FROM
(
    SELECT cellid, COUNT(*) AS rows
    FROM rel
    GROUP BY cellid
)tmp1
LEFT JOIN
(
    SELECT cellid, cat AS mode_cat
    FROM rel t
    GROUP BY cellid, cat
    HAVING cat = (
        SELECT cat
        FROM rel
        WHERE cellid = t.cellid
        GROUP BY cat
        ORDER BY COUNT(*) DESC, cat
        LIMIT 1
    )
)tmp2
ON tmp1.cellid = tmp2.cellid;

 

참조 페이지 https://stackoverflow.com/questions/13053521

 

 

반응형

댓글