mariadb 각 합계 0 3 1,935

by 밍밍밍밍 [MySQL] [2022.08.10 15:48:27]


20220810_154751.png (3,312Bytes)

안녕하세요.

mariadb 10.1 버전사용중입니다.

병원별 합계를 포함하여 첨부파일 처럼데이터를 추출하려고 하는데 쿼리로 가능할까요?

 

hospital table

hospitalNo hospitalName
1 병원A
2 병원B
3 병원C

 

user table

userNo userName hospitalNo costNo
1 길동 1 1
2 영수 1 2
3 철수 2 3
4 민수 3 4

 

 

cost table

costNo cnt(수술횟수) cost
1 1 10000
1 2 5000
2 1 30000
3 1 7000
4 1 2000

 

 

by 마농 [2022.08.10 16:53:40]

MySQL 의 WITH ROLLUP 은 괄호 사용이 안되고
GROUPING 이나 GROUPING_ID 기능도 없어 불편하네요.
 

-- MariaDB --
WITH hospital AS
(
SELECT 1 hospitalNo, '병원A' hospitalName
UNION ALL SELECT 2, '병원B'
UNION ALL SELECT 3, '병원C'
)
, user AS
(
SELECT 1 userNo, '길동' userName, 1 hospitalNo, 1 costNo
UNION ALL SELECT 2, '영수', 1, 2
UNION ALL SELECT 3, '철수', 2, 3
UNION ALL SELECT 4, '민수', 3, 4
)
, cost AS
(
SELECT 1 costNo, 1 cnt, 10000 cost
UNION ALL SELECT 1, 2,  5000
UNION ALL SELECT 2, 1, 30000
UNION ALL SELECT 3, 1,  7000
UNION ALL SELECT 4, 1,  2000
)
SELECT a.hospitalNo
     , a.hospitalName
     , IFNULL(b.userName, '소계') userName
     , SUM(c.cost) cost
     , SUM(c.cnt) cnt
     , CONCAT( CASE WHEN a.hospitalNo   IS NULL THEN 1 ELSE 0 END
             , CASE WHEN a.hospitalName IS NULL THEN 1 ELSE 0 END
             , CASE WHEN b.userNo       IS NULL THEN 1 ELSE 0 END
             , CASE WHEN b.userName     IS NULL THEN 1 ELSE 0 END
             ) gid
  FROM hospital a
 INNER JOIN user b
    ON a.hospitalNo = b.hospitalNo
 INNER JOIN cost c
    ON b.costNo = c.costNo
 GROUP BY a.hospitalNo, a.hospitalName
     , b.userNo, b.userName
  WITH ROLLUP
 HAVING gid IN ('0000', '0011')
;

 


by 밍밍밍밍 [2022.08.10 17:41:13]

답변감사합니다 확인해보겠습니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입