

script = """
SELECT
albumid,
COUNT(trackid) AS Count
-- 조회(SELECT)의 대상이 되는 항목에 대해 바로 집계함수를 적용할 수 있습니다.
FROM
tracks
GROUP BY
albumid
ORDER BY
COUNT(trackid) DESC; -- 앨범마다 속한 총 트랙의 수를 기준으로 하여 내림차순 정렬 (많은 곡이 수록된 앨범일수록 위로)
"""
df = pd.read_sql_query(script, conn)
df.head()
동일한 앨범 ID를 갖고 있는 모든 곡(track)들의 수를 카운트(COUNT)
script = """
SELECT
albumid,
COUNT(trackid)
FROM
tracks
GROUP BY
albumid
HAVING -- ~~~을 가지고 있는(having)
albumid = 1;
"""
HAVING은 반드시 앞에 GROUP BY가 있어야 합니다 (WHERE 와의 차이점)
script = """
SELECT
albumid,
SUM(tracks.milliseconds) AS length, -- (앨범에 속한 모든) 곡의 길이
SUM(tracks.bytes) AS size -- (앨범에 속한 모든) 곡의 용량
FROM
tracks
GROUP BY
albumid;
"""
합계 계산
script = """
SELECT
tracks.albumid,
albums.title,
MIN(tracks.milliseconds), -- 앨범에 속한 곡들 중 가장 짧은(MIN) 곡의 길이
MAX(tracks.milliseconds), -- 앨범에 속한 곡들 중 가장 긴(MAX) 곡의 길이
ROUND(AVG(tracks.milliseconds), 2) -- 앨범에 속한 곡들의 길이를 평균(AVG)한 다음 소수점 둘째(2) 자리까지만 나타나도록 반올림(ROUND)
-- ROUND(X, n)에서 [n번째 자리에서 반올림]이 아니라 [n번째 자리까지 표시]라는 점에 유의
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
GROUP BY
tracks.albumid;
"""
script = """
-- Let There Be Rock 라는 제목을 가진 앨범의 수록곡을 모두 확인하고자 함
SELECT trackid,
name,
albumid
FROM tracks
WHERE albumid = (
SELECT albumid
FROM albums
WHERE title = 'Let There Be Rock'
);
"""