โœ๏ธ 24.12.06 TIL

Dadaยท2024๋…„ 12์›” 9์ผ

๐Ÿ“ MEMO


1. REGEXP ( )

  • MySQL์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠน์ • ๋ฌธ์ž๋ฅผ ๋™์‹œ์— ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ
-- ๊ธฐ๋ณธ ๊ตฌ์กฐ
WHERE ๊ฒ€์ƒ‰์ปฌ๋Ÿผ REGEXP('๊ฒ€์ƒ‰๋ฌธ์ž1|๊ฒ€์ƒ‰๋ฌธ์ž2|...');
-- ์˜ˆ์‹œ
SELECT
    *
FROM
    car_rental_company_car
WHERE 
    options REGEXP('ํ†ตํ’์‹œํŠธ|์—ด์„ ์‹œํŠธ|๊ฐ€์ฃฝ์‹œํŠธ')

2. ๋‚ ์งœ ๋ฐ์ดํ„ฐ ์ถ”์ถœ

  • YEAR() : ๋…„๋„ ์ถ”์ถœ
  • MONTH(): ์›” ์ถ”์ถœ
  • DAYOFMONTH( ): ์ผ ์ถ”์ถœ
  • DATEDIFF(A,B): A๋‚ ์งœ์—์„œ B๋‚ ์งœ ๋นผ๊ธฐ
  • CURDATE(): ์˜ค๋Š˜ ๋‚ ์งœ ์ถ”์ถœ

3. COUNT(expr) [over_clause]

  • SELECT๋ฌธ์—์„œ ๊ฒ€์ƒ‰๋œ ํ–‰ ์ค‘ NULL์ด ์•„๋‹Œ ๊ฐ’์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
  • ๋ฐ˜ํ™˜ ๊ฐ’์€ BIGNT ์œ ํ˜•
  • ์ผ์น˜ํ•˜๋Š” ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ COUNT( )๋Š” 0์„ ๋ฐ˜ํ™˜
  • ์˜ˆ๋ฅผ ๋“ค์–ด, COUNT(NULL)์€ ํ•ญ์ƒ 0์„ ๋ฐ˜ํ™˜

4. COUNT(*)

  • COUNT(*) : NULL ๊ฐ’์„ ํฌํ•จํ•˜์—ฌ ๊ฒ€์ƒ‰๋œ ํ–‰์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜

5. SELECT COUNT(*) vs SELECT COUNT(1)

  • InnoDB์—์„œ๋Š” SELECT COUNT(*)์™€ SELECT COUNT(1)์˜ ๋™์ž‘์ด ๋™์ผ โ†’ ์„ฑ๋Šฅ ์ฐจ์ด ์—†์Œ

๐Ÿ“š SQL ๊ธฐ์ดˆ ๊ฐ•์˜


[ โ–ถ SQL ๊ธฐ์ดˆ ๊ฐ•์˜ ]
1. Pivot Table ๋งŒ๋“ค๊ธฐ

  • From๋ฌธ์— ์„œ๋ธŒ์ฟผ๋ฆฌ ์ž‘์„ฑํ•˜์—ฌ ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ ํ›„ GROUP BY์™€ IF๋ฌธ ์‚ฌ์šฉํ•˜์—ฌ Pivot Table ๊ตฌ์„ฑ
    -- ์Œ์‹์ ๋ณ„ ์‹œ๊ฐ„๋ณ„ ์ฃผ๋ฌธ ๊ฑด์ˆ˜ Pivot Table ๋ทฐ ๋งŒ๋“ค๊ธฐ
    SELECT 
    	restaurant_name
    	-- GROUP BY๋กœ ๋ฌถ์–ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง‘๊ณ„ํ•จ์ˆ˜ ์‚ฌ์šฉ
    	, MAX(IF(pay_time='15',cnt_orders,0)) '15'
    	, MAX(IF(pay_time='16',cnt_orders,0)) '16'
    	, MAX(IF(pay_time='17',cnt_orders,0)) '17'
    	, MAX(IF(pay_time='18',cnt_orders,0)) '18'
    	, MAX(IF(pay_time='19',cnt_orders,0)) '19'
    	, MAX(IF(pay_time='20',cnt_orders,0)) '20'
    FROM 
    	(	-- ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ
    		SELECT
    			f.restaurant_name 
    			, HOUR(p.time) pay_time
    			, COUNT(1) cnt_orders
    		FROM 
    			food_orders f 
    			LEFT JOIN payments p
    			ON f.order_id = p.order_id
    		WHERE HOUR(p.time) BETWEEN 15 AND 20
    		GROUP BY 
    			restaurant_name, pay_time) a
    GROUP BY 1
    -- alias = ์ˆซ์ž๋กœ ์ž‘์„ฑ โ†’ ์–ต์Œ ๋ถ€ํ˜ธ ์‚ฌ์šฉ
    ORDER BY `20` DESC;

0๊ฐœ์˜ ๋Œ“๊ธ€