SQL 질문드립니다..

SQL 질문드립니다..

QA

SQL 질문드립니다..

본문

+-----------------+--------------+--------+--------+-----------+-----------+
| 고객아이디      | 고객이름     | 나이   | 등급   | 직업      | 적립금    |
+-----------------+--------------+--------+--------+-----------+-----------+
| apple           | 정소화       |     20 | gold   | 학생      |      1000 |
| banana          | 김선우       |     25 | vip    | 간호사    |      2500 |
| carrot          | 고명석       |     28 | gold   | 교사      |      4500 |
| melon           | 성원용       |     35 | gold   | 회사원    |      5000 |
| orange          | 김용욱       |     22 | silver | 학생      |         0 |
| peach           | 오형준       |   NULL | silver | 의사      |       300 |
| pear            | 채광주       |     31 | silver | 회사원    |       500 |
+-----------------+--------------+--------+--------+-----------+-----------+
 

gold’ 등급의 고객명과 적립금, 등급별 적립금 평균과의 차액 리스트를 적립금에 대해 내림차순으로

출력하려고 할때 등급별 적립금 평균과의 차액 리스트를 어떤식으로 작성해야 할까요..?

 

SELECT 고객이름,적립금

FROM 고객

WHERE 등급='gold'

oder by 적립금 desc;

이 질문에 댓글 쓰기 :

답변 4

이런식으로 서브쿼리 쓰시면 될것 같습니다.

join으로 하는게 더 좋을거 같은데 음...그건 한번 생각해보심이....

 

select
    a.고객이름, 
    a.적립금,
    (select avg(적립금)-a.적립금 from 고객 where 등급=a.등급) as 차액
from
    고객 as a
where 
    a.등급='gold'
order by 
    a.적립금 desc;

테스트하기 좋은 샘플같아서 

mysql로 간단히 구현해봤습니다.

원하시는 결과가 맞는지는 모르겟으나, 소숫점등은 알아서 변경하시면됩니다.

 


/*
gold’ 등급의 고객명과 적립금, 등급별 적립금 평균과의 차액 리스트를 적립금에 대해 내림차순으로
출력하려고 할때 등급별 적립금 평균과의 차액 리스트를 어떤식으로 작성해야 할까요..?
*/
CREATE TABLE `test1` (
    `NO` INT(11) NOT NULL AUTO_INCREMENT,
    `id` VARCHAR(20) NULL DEFAULT '' COLLATE 'utf8_general_ci',
    `name` VARCHAR(30) NULL DEFAULT '' COLLATE 'utf8_general_ci',
    `age` VARCHAR(30) NULL DEFAULT '' COLLATE 'utf8_general_ci',
    `LEVEL` VARCHAR(30) NULL DEFAULT '' COLLATE 'utf8_general_ci',
    `job` VARCHAR(30) NULL DEFAULT '' COLLATE 'utf8_general_ci',
    `point` INT(11) NULL DEFAULT '0',
    PRIMARY KEY (`NO`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

INSERT INTO `test1` (`NO`, `id`, `name`, `age`, `LEVEL`, `job`, `point`) VALUES (1, 'apple', '정소화', '20', 'gold', '학생', 1000);
INSERT INTO `test1` (`NO`, `id`, `name`, `age`, `LEVEL`, `job`, `point`) VALUES (2, 'banana', '김선우', '25', 'vip', '간호사', 2500);
INSERT INTO `test1` (`NO`, `id`, `name`, `age`, `LEVEL`, `job`, `point`) VALUES (3, 'carrot', '고명석', '28', 'gold', '교사', 4500);
INSERT INTO `test1` (`NO`, `id`, `name`, `age`, `LEVEL`, `job`, `point`) VALUES (4, 'melon', '성원용', '35', 'gold', '회사원', 5000);
INSERT INTO `test1` (`NO`, `id`, `name`, `age`, `LEVEL`, `job`, `point`) VALUES (5, 'orange', '김용욱', '22', 'silver', '학생', 0);
INSERT INTO `test1` (`NO`, `id`, `name`, `age`, `LEVEL`, `job`, `point`) VALUES (6, 'peach', '오형준', 'NULL', 'silver', '의사', 300);
INSERT INTO `test1` (`NO`, `id`, `name`, `age`, `LEVEL`, `job`, `point`) VALUES (7, 'pear', '채광주', '31', 'silver', '회사원', 500);
SELECT  
    a.id,
    a.name,
    a.age,
    a.job,
    a.level,
    a.point,
    (
        (
            SELECT 
                SUM(POINT) sp 
            FROM test1 b
            WHERE LEVEL = a.`LEVEL`
        ) / 
        (
            SELECT 
                COUNT(LEVEL) 
            FROM test1 b
            WHERE LEVEL = a.`LEVEL`
        )
    ) AS AVG
    ,
    a.point - (
        (
            SELECT 
                SUM(POINT) sp 
            FROM test1 b
            WHERE LEVEL = a.`LEVEL`
        ) / 
        (
            SELECT 
                COUNT(LEVEL) 
            FROM test1 b
            WHERE LEVEL = a.`LEVEL`
        )
    ) AS cha
FROM test1 a
ORDER BY cha;
 
답변을 작성하시기 전에 로그인 해주세요.
전체 1,543
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT