"가장 높은 아이템 수는?"
SELECT MAX(article) AS article FROM shop;
+---------+ | article | +---------+ | 4 | +---------+
마찬가지로, 최소 값을 찾기 위해서는 다음을 활용할 수 있다.
SELECT MIN(jnr_id) AS jnr_id FROM chain +----------+ | jnr_id | +----------+ | 1000 | +----------+
평균 값은
SELECT avg(article) AS article_avg FROM shop; +-------------+ | article_avg | +-------------+ | 2.4286 | +-------------+
SUM 값은
select sum(article) as Total from shop; +-------+ | Total | +-------+ | 17 | +-------+
위와 같은 쿼리를 사용할 수 있다.
특정 컬럼의 최대 행
가장 비싼 article의 정보를 찾기 위해, 최대 행을 찾을 때 subquery를 사용하면 쉽게 적용할 수 있다.
SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop); +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0004 | D | 19.95 | +---------+--------+-------+
다른 방법으로는 LEFT JOIN을 사용하는 방법,
또는 price를 기준으로 내림차순 정렬한 뒤 MySQL의 특정 LIMIT절을 사용하여 첫번째 값을 얻을 수도 있다.
SELECT s1.article, s1.dealer, s1.price FROM shop s1 LEFT JOIN shop s2 ON s1.price < s2.price WHERE s2.article IS NULL; SELECT article, dealer, price FROM shop ORDER BY price DESC LIMIT 1;
그룹 당 컬럼의 최대 값
최대값을 찾기 위한 쿼리는 다음과 같다.
SELECT article, MAX(price) AS price FROM shop GROUP BY article; +---------+-------+ | article | price | +---------+-------+ | 0001 | 3.99 | | 0002 | 10.99 | | 0003 | 1.69 | | 0004 | 19.95 | +---------+-------+
The Rows Holding the Group-wise Maximum of a Certain Column
각 각의 article에 대해 가장 비싼 가격의 dealer나 dealers를 찾는 문제를 해결하기 위해 아래와 같이
subquery를 사용할 수 있다.
SELECT article, dealer, price FROM shop s1 WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article); +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0001 | B | 3.99 | | 0002 | A | 10.99 | | 0003 | C | 1.69 | | 0004 | D | 19.95 | +---------+--------+-------+
위의 예는 상관 된 하위쿼리로, 비효율적으로 사용될 수 있다. 이 문제를 해결하기 위한 다른 가능성은 FROM절에 상관 하위 쿼리를 사용하거나 LEFT JOIN을 사용하는 것이다.
상관 서브 쿼리:
SELECT s1.article, dealer, s1.price FROM shop s1 JOIN ( SELECT article, MAX(price) AS price FROM shop GROUP BY article) AS s2 ON s1.article = s2.article AND s1.price = s2.price;
LEFT JOIN:
SELECT s1.article, s1.dealer, s1.price FROM shop s1 LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price WHERE s2.article IS NULL;
BY lee ji eun
'2. DBMS이야기 > 02. MySQL' 카테고리의 다른 글
MySQL 설치 후 최적화 - Basic Setting TOP 3 (0) | 2014.08.28 |
---|---|
MySQL 설치 후 InnoDB Engine Setting (0) | 2014.08.28 |
MySQL에서 새 user를 생성하고 permission을 부여하는 방법 (0) | 2014.08.04 |
The MEMORY (HEAP) Storage Engine (1) (0) | 2014.07.03 |
mysqladmin — Client for Administering a MySQL Server (2) (0) | 2014.07.03 |