취 합 함수 + CASE

2053 단어 SQL
SELECT 
	c.name AS country,
    -- Count games from the 2012/2013 season
	COUNT (CASE WHEN m.season = '2012/2013' 
        	THEN m.id ELSE NULL END) AS matches_2012_2013
FROM country AS c
LEFT JOIN match AS m
ON c.id = m.country_id
-- Group by country name alias
GROUP BY country;

Count 는 값 이 NULL 이면 통계 수 를 계산 하지 않 습 니 다. (count ('임의의 내용') 는 모든 기록 수 를 집계 합 니 다. count 는 null 을 만 났 을 때 만 계산 하지 않 습 니 다. 즉, count (null) = = 0 이기 때문에 전자 따옴표 에 어떤 값 을 입력 하 더 라 도 모든 기록 수 를 집계 합 니 다.
CASE SHEN 으로 logical values 를 집계 합 니 다.
In R or Python, you have the ability to calculate a SUM of logical values (i.e., TRUE/FALSE) directly. In SQL, you have to convert these values into 1 and 0 before calculating a sum.
SELECT 
	c.name AS country,
    -- Sum the total records in each season where the home team won
	SUM(CASE WHEN m.season = '2012/2013' AND m.home_goal > m.away_goal 
        THEN 1 ELSE 0 END) AS matches_2012_2013,
 	SUM(CASE WHEN m.season = '2013/2014' AND m.home_goal > m.away_goal 
        THEN 1 ELSE 0 END) AS matches_2013_2014,
	SUM(CASE WHEN m.season = '2014/2015' AND m.home_goal > m.away_goal 
        THEN 1 ELSE 0 END) AS matches_2014_2015
FROM country AS c
LEFT JOIN match AS m
ON c.id = m.country_id
-- Group by country name alias

여 기 는 count () 가 아니 라 sum () 을 사용 합 니 다.
SELECT 
	c.name AS country,
    -- Round the percentage of tied games to 2 decimal points
	ROUND(AVG(CASE WHEN m.season='2013/2014' AND m.home_goal = m.away_goal THEN 1
			 WHEN m.season='2013/2014' AND m.home_goal != m.away_goal THEN 0
			 END)*100,2) AS pct_ties_2013_2014,
	ROUND(AVG(CASE WHEN m.season='2014/2015' AND m.home_goal = m.away_goal THEN 1
			 WHEN m.season='2014/2015' AND m.home_goal != m.away_goal THEN 0
			 END)*100,2) AS pct_ties_2014_2015
FROM country AS c
LEFT JOIN matches AS m
ON c.id = m.country_id
GROUP BY country;

다른 용법 = avg (), 조건 에 부합 되 는 1, 부합 되 지 않 는 0

좋은 웹페이지 즐겨찾기