database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6369 게시물 읽기
No. 6369
상대전적 쿼리문 입니다. 한번 봐주셨으면 좋겠습니다ㅠㅠ
작성자
하늘만쳐다봐
작성일
2012-04-22 18:32
조회수
7,460

7명이 뛰는 경기 입니다.

 

구분 김개똥 홍길동
1 1 3
2 5 4
3 3 6
4 5 7
5 2 7
6 0(기권) 0(기권)
7 4 5
8 3 7
9 7 4
10 1 2
11 7 3
12 5 2

 

김개똥 기준 12전 7승 1무 4패 VS

홍길동 기준 12전 4승 1무 7패

*이런 결과가 나와야 합니다.

 



 

구분 김개똥 김말똥
1 2 5
2 6 3
3 2 1
4 1 0(기권)
5 1 6
6 5 7
7 5 3
8 6 3

 

김개똥 기준 8전 4승 4패 VS

김말똥 기준 8전 4승 4패

*이런 결과가 나와야 합니다.


 



 

//COUNT(CASE WHEN A.경주순위 > '0' AND B.경주순위 > '0' AND A.경주순위 < B.경주순위 THEN 1 END) AS 승$j,

//COUNT(CASE WHEN (A.경주순위 != '0' AND B.경주순위 != '0') AND (A.경주순위 <= b.경주순위) THEN 1 END) AS 승$j,

//COUNT(CASE WHEN A.경주순위 != '0' AND B.경주순위 != '0' AND A.경주순위 < b.경주순위 THEN 1 END) AS 승$j,

//COUNT(CASE WHEN (A.경주순위 > '0' AND B.경주순위 = '0') OR A.경주순위 < b.경주순위 THEN 1 END) AS 승$j,

//COUNT(CASE WHEN A.경주순위 > '0' AND A.경주순위 < b.경주순위 OR B.경주순위 = '0' THEN 1 END) AS 승$j,

//COUNT(CASE WHEN A.경주순위 > '0' AND A.경주순위 < b.경주순위 OR B.경주순위 = '0' THEN 1 END) AS 승$j,

 




 

SELECT COUNT(*) AS 총전적,

COUNT(CASE WHEN A.경주순위 > '0' AND A.경주순위 > b.경주순위 OR B.경주순위 = '0' THEN 1 END) AS 승,

count(case when a.경주순위 = '0' or a.경주순위 > b.경주순위 then 1 end) AS 패


 

//에 있는 CASE문은 여태 시도했던 것 들입니다.

데이터가 하나가 맞으면 하나가 안 맞고 그렇다고 다른 방법으로 쓰면 아예 오류가 나버리고 좋은 방법이 있을까해서 이렇게 질문 남겨 봅니다.

팁 좀 주세요 엉엉ㅜㅜ

 

질문내용 - 단순히 A.경주순위 > B.경주순위 이렇게 비교해버리면 A가 0위 한거까지 승리로 나와버립니다.

그리고 두 선수가 모두 0위한거는 처리를 안해야 하고 B가 0위하고 A.가 7등했으면 그래도 승리로 나와야 합니다.

쉬운거 같으면서도 은근히 골때리는....고수님들한테는 쉬울지도 모르겠습니다...;;

 

 

이 글에 대한 댓글이 총 4건 있습니다.

 --다른 데이타 같은 쿼리

with scr(id, dd, hh)
as(
select  1, 1, 3 union all
select  2, 5, 4 union all
select  3, 3, 6 union all
select  4, 5, 7 union all
select  5, 2, 7 union all
select  6, 0, 0  union all
select  7, 4, 5 union all
select  8, 3, 7 union all
select  9, 7, 4 union all
select 10, 1, 2 union all
select 11, 7, 3 union all
select 12, 5, 2
)
select case when dd = hh then '무' 
when dd < hh then '개'
else '홍'
end as whowin, COUNT(*)
from scr
group by case when dd = hh then '무' 
when dd < hh then '개'
else '홍'
end with rollup
;
 
with scr(id, dd, hh)
as(
select 1, 2, 5 union all
select 2, 6, 3 union all
select 3, 2, 1 union all
select 4, 1, 0 union all
select 5, 1, 6 union all
select 6, 5, 7 union all
select 7, 5, 3 union all
select 8, 6, 3
)
select case when dd = hh then '무' 
when dd < hh then '개'
else '말'
end as whowin, COUNT(*)
from scr
group by case when dd = hh then '무' 
when dd < hh then '개'
else '말'
end with rollup
;
 
우욱님이 2012-04-23 06:52에 작성한 댓글입니다. Edit

댓글 감사합니다...

그런데 너무 어렵습니다......간단하게 설명이라도 부탁드리겠습니다.

다시 한번 답글 남겨주셔서 너무 감사드립니다.

복 받으실겁니다ㅠㅠ

하늘만쳐다봐님이 2012-04-23 07:01에 작성한 댓글입니다. Edit

 select case when dd = hh then '무'  -- (1)개똥이와 말똥이이 동점인 경우 무승부 처리

when dd < hh then '개' -- (2)개똥이가 말똥이보다 순위가 앞서는 경우 승자: 개똥이
else '말' -- (3)그외의 모든 경우는 말똥이가 승리
end as whowin, COUNT(*)  -- (6) 각 그룹(개똥이/말똥이/무승부)별로 횟수 계산
from scr
-- (4)위의 , COUNT(*) 없이 여기까지만 실행해보면 매회 승자 혹은 무승부를 결정할 수 있음.
group by case when dd = hh then '무' -- (5)각각의 경우에 대해 group by를 수행하기 위해 select 부분과 동일한 내용으로 group by
when dd < hh then '개'
else '말'
end with rollup -- (7)몇 번 겨루었는지 모두 더하기
;
우욱님이 2012-04-23 18:31에 작성한 댓글입니다. Edit

정말 감사드립니다. 열심히 한번 해보겠습니다.

좋은 하루 되시길 바랍니다~~

하늘만쳐다봐님이 2012-04-24 02:06에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6373여러쿼리로 동시에 insert시 [1]
호이짜
2012-05-09
7830
6372MAX 함수의 Varchar형 일때 [3]
질문자
2012-05-07
7334
6371레코드 시작번호와 끝번호, 개수 구하는 프로시저 [2]
정인수
2012-05-01
7422
6369상대전적 쿼리문 입니다. 한번 봐주셨으면 좋겠습니다ㅠㅠ [4]
하늘만쳐다봐
2012-04-22
7460
6368쿼리 질문입니다. [2]
정인수
2012-04-21
7128
6367MSSQL 2005 데이터 형식 여쭤봅니다. [1]
정필교
2012-04-19
7516
6366DB서버 동시접속 몇명까지인가요? [1]
이성안
2012-04-19
9686
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다