2. DBMS이야기/02. MySQL

MySQL 쿼리 예시(1)

OSSW(Open Source System SoftWare 2014. 8. 7. 16:04

"가장 높은 아이템 수는?"

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