IT/DataBase

[SQL] ๋ฐฑ๋ถ„์œจ ์˜ˆ์ œ

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2024. 3. 20.

๋ชฉ์ฐจ

    SELECT 5 / 30 * 100 
      FROM dual
    ;

    1. ๋ฐฑ๋ถ„์œจ ๊ณ„์‚ฐ์‹

    ๊ตฌํ•˜๋ ค๋Š” ์ปฌ๋Ÿผ์„ ์ „์ฒด ์ปฌ๋Ÿผ๊ฐœ์ˆ˜๋กœ ๋‚˜๋ˆˆ ๋’ค 100์„ ๊ณฑํ•œ๋‹ค.


    ์‹ค์ „ SQL(cubrid ์‚ฌ์šฉ)

    SELECT CASE WHEN A.HOUSE_TY_SECD = '1' THEN '๋‹ค๊ฐ€๊ตฌ'
    			WHEN A.HOUSE_TY_SECD = '2' THEN '๋นŒ๋ผ'
    			WHEN A.HOUSE_TY_SECD = '3' THEN '์•„ํŒŒํŠธ'
    			WHEN A.HOUSE_TY_SECD = '4' THEN '์˜คํ”ผ์Šคํ…”'
    			WHEN A.HOUSE_TY_SECD = '5' THEN '๋‹จ๋…'
    			WHEN A.HOUSE_TY_SECD = '6' THEN '๋‹ค์„ธ๋Œ€'
    			WHEN A.HOUSE_TY_SECD = '7' THEN '์—ฐ๋ฆฝ'
    			WHEN A.HOUSE_TY_SECD = '8' THEN '๊ธฐํƒ€'
    		END AS houseType
          , COUNT(A.HOUSE_TY_SECD) AS totalCnt
          , CASE WHEN (SELECT count(*)
          				 FROM BOARD
          				WHERE INFO_SECD = '30' 
    					) = 0 
    	  THEN 0
    	  ELSE ROUND(COUNT(A.HOUSE_TY_SECD) / CAST((SELECT count(*)
          				 				   FROM BOARD
          				                  WHERE INFO_SECD = '30'
    								) AS float) * 100, 2)
    	  END AS rate								
      FROM BOARD A
     WHERE A.INFO_SECD = '30' 
     GROUP BY A.HOUSE_TY_SECD
    ;

    ํ•จ์ˆ˜(RATIO_TO_REPORT())

    SELECT
        type,
        COUNT(*) AS count,
        ROUND(RATIO_TO_REPORT(COUNT(type)) OVER () * 100, 2) AS percentage
    FROM
        BOARD
    GROUP BY
        type;

    ๊ฐœ์ธ ์Šคํ„ฐ๋”” ๊ธฐ๋ก์„ ๋ฉ”๋ชจํ•˜๋Š” ๊ณต๊ฐ„์ด๋ผ ํ‹€๋ฆฐ์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ํ‹€๋ฆฐ ์  ์žˆ์„ ๊ฒฝ์šฐ ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

    ๋Œ“๊ธ€