2014-09-17 3 views
0

제 데이터베이스에는 몇 개의 상점이 있고 각 상점에는 몇 개의 쿠폰이 있으며 상점 당 최대 쿠폰 당 계급을 찾아야합니다. 나는 출력이 최대 합계 (couponscount)하지만 상점 이름 알파벳 순서에 따라 자사의 인쇄 순위에 따라 순위를 인쇄하지 않고, 다음과 같은 SQL 코드MySQL에있는 상점 목록의 순위 위치를 찾으십시오

set @rownum := 0; 
SELECT @rownum := @rownum + 1 AS rank, sum(couponscount) as count, restaurant from coupons group by restaurant order by count desc 

를 사용하지만하고있다.

어떻게 작동시킬 수 있습니까? 나는 첫 번째 SQL 쿼리뿐만 아니라 이것과 호환되어야 필요

는 또한 특정 레코드의 순위를 검색해야하고 나는 그래서

set @rownum := 0; 
select rank from (SELECT @rownum := @rownum + 1 AS rank, sum(couponscount) as count, restaurant from coupons group by restaurant order by count desc) `storerank` where restaurant='some store name' 

에 대해 다음 SQL 쿼리를 사용하고 있습니다.

감사합니다.

+0

원한다면이 간단한 2 단계 과정 1. 아직 수행하지 않았다면 문제를보다 쉽게 ​​복제 할 수 있도록 적절한 DDL (및/또는 sqlfiddle)을 제공하십시오. 2. 아직 수행하지 않았다면, 1 단계에서 제공된 정보와 일치하는 원하는 결과 세트를 제공하십시오. – Strawberry

답변

1

이것은 mysql에서 작동합니다. 임시 테이블은 세션이 끝날 때 제거되고 세션에 고유하기 때문에 두 프로세스가 충돌하는 동일한 프로세스를 실행하는 데 문제가 없습니다. 세션에서 두 번 이상 실행해야하는 경우 "Drop"을 추가하십시오 (현재 데이터베이스에없는 이름을 사용해야 함)

create temporary table temp select userid, sum(casesin) as CS from cases where csdate between '2014-07-25' and '2014-07-31' group by userid order by 2 ; 

    select @x:[email protected]+1 rrn, userid, CS from temp, (SELECT @x:= 0) AS s order by CS; 
    Drop table temp; 
0

이것은 티켓에서 가장 많은 사례를 누가 매일 팔았는지 확인하기 위해 티켓 번호에 가입 한 두 파일에서 작동합니다.

SELECT IDENTITY(int, 1,1) AS Ranking, sum(qtydelivered) as QtyDelivered, orderticketnumber into #Temp from orderlines join orders on orderticketnumber = ticketnumber WHERE shippeddate = '2014-09-15' group by orderticketnumber order by 1 desc; 

    select * from #Temp; 

    drop table #Temp; 
+0

이것은 MySQL에서는 작동하지 않습니다. 그것은 오라클 쿼리에 있어야합니다. – lock

관련 문제