2009-11-02 12 views
0

두 문 대신 한 문에서 두 값을 선택하려고합니다. 첫 번째 진술 문은 ID가 18 인 특정 콘테스트에서 몇 개의 항목이 차지했는지 계산합니다. 두 번째 문은 해당 콘테스트의 총 상금을 계산합니다.SQL : 하위 쿼리 지원

쿼리 1 : 2

SELECT SUM(quantity) FROM prizes WHERE contest=18 

내가 가지고 두 그래서 그 비교시 서버 측 행동에 그들을 비교할 수 원하는

SELECT 

COUNT(*) FROM entries 

WHERE entries.contest=18 

AND entries.won=1 

쿼리 .. 그래서 우리는이 있다면 말 18 대회 및 제 18 회 대회 인 5 상품의 총 수량을 수상 3 진입, 무언가를 ...

스키마 :

CREATE TABLE `entries` (
    `id` int(2) unsigned NOT NULL auto_increment, 
    `message_id` bigint(8) unsigned default NULL, 
    `user` int(2) unsigned default NULL, 
    `username` varchar(50) NOT NULL, 
    `contest` int(2) unsigned default NULL, 
    `message` text, 
    `icon` text, 
    `twitter_url` text, 
    `follower` int(2) unsigned default NULL, 
    `entry_date` timestamp NOT NULL default '0000-00-00 00:00:00', 
    `won` int(1) default '0', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 

CREATE TABLE `prizes` (
    `id` int(2) unsigned NOT NULL auto_increment, 
    `name` varchar(25) NOT NULL, 
    `contest` int(2) NOT NULL, 
    `quantity` int(2) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 

입력란을 제어하기 때문에 users 테이블이 없기 때문에 사용자 이름 등이 항목 행에 저장되는 이유는 중복되지 않습니다. 쿼리로

답변

2

이 같은 결과에이를 얻기 위해 두 개의 하위 쿼리를 사용하는 것이 전혀 공통점이 아무것도하지 않습니다

select 
    (select count(*) from entries where contest = 18 and won = 1) as wins, 
    (select sum(quantity) from prizes where contest = 18) as quantity 
+0

이 최고, 감사합니다. 방금 누가 내가 어떤 상을 탔는지 추적하지 않는다는 것을 깨달 았습니다. 단지 참가자가 이겼거나 그렇지 않은 경우에만 기본 설정이 '0'입니다. '원'을 '1'대신 상금으로 설정해야합니까? '? –

+0

흠, 단지 0이나 1이 pk가 될 수 있다고 생각하고 있었고,'id' pk가 2에서 시작하도록 상금 테이블을 업데이트 할 수도있었습니다. –

+0

@meder : "win 대신 "필드에는 nullable 인"prize_id "필드가있을 수 있습니다. Null 값은 영 (0)과 같은 매직 넘버가 아닌 비 승리 (non-win)에 대한보다 명확한 지표가됩니다. – Guffa