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개
테스트하기 좋은 샘플같아서
mysql로 간단히 구현해봤습니다.
원하시는 결과가 맞는지는 모르겟으나, 소숫점등은 알아서 변경하시면됩니다.
</p>
<p>/*</p>
<p>gold’ 등급의 고객명과 적립금, 등급별 적립금 평균과의 차액 리스트를 적립금에 대해 내림차순으로</p>
<p>출력하려고 할때 등급별 적립금 평균과의 차액 리스트를 어떤식으로 작성해야 할까요..?
*/</p>
<p>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
;</p>
<p>
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);</p>
<p>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;
</p>
<p>
댓글을 작성하려면 로그인이 필요합니다.
oracle 퀴즈 같습니다. mysql로는 여러 번 query 실행해야 될 거 같습니다.
원하시는 결과를 표로 만들어 주셔야 명확할 거 같습니다.
댓글을 작성하려면 로그인이 필요합니다.
이런식으로 서브쿼리 쓰시면 될것 같습니다.
join으로 하는게 더 좋을거 같은데 음...그건 한번 생각해보심이....
select a.고객이름, a.적립금, (select avg(적립금)-a.적립금 from 고객 where 등급=a.등급) as 차액 from 고객 as a where a.등급='gold' order by a.적립금 desc;
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인