2017-10-30 1 views
3
id | user_id | prd_id | amnt | dis 
1 | 1  | 10 | 200 | 23 
2 | 2  | 10 | 300 | 11 
3 | 3  | 20 | 100 | 26 
4 | 2  | 20 | 50 | 12 
5 | 4  | 30 | 100 | 22 
6 | 2  | 40 | 600 | 18 
7 | 2  | 30 | 100 | 16 

받기 :나는 위의 표에서이 결과를 원하는 최고 금액, 제품의 수/사용자

user_id | cont | bid on prd_id | winner on bid prod_id | 
1  | 1 | 10    | -     | - 
2  | 4 | 10,20,30,40  | 10,40    | 
3  | 1 | 20    | 20     | 
4  | 1 | 30    | 30     | 

:

먼저 by prod_id 아래

prd_id | user_id | cont | highestamt | disc 
10  | 2  | 2 | 300  | 11 
20  | 3  | 2 | 100  | 26 
30  | 4  | 2 | 100  | 22 
40  | 2  | 1 | 600  | 18 

둘째 by user_id 아래로 업데이트 : 예 : 위 : user_id = 2는 제품 10,20,30,40 (prd_id에 대한 입찰)에 입찰하므로 그의 입찰 cont = 4 ... 10,40 (bidd prod_id에서 우승)에서 우승했습니다 ..WHY ONLY 10,40 30이 아닌 ... bcz user_id = 4는 amt = 100 인 amd = 100 및 amt = 100 인 user_id = 2에 대한 입찰가를가집니다. 그러나 첫 번째 입찰가는 prd = 30에 대한 사용자 = 4에 의해 결정되므로 prd = 30 (동일한 amt에 대해)

아래 질문을 시도하면 by prd_id이 나에게 잘못된 결과가 표시됩니다. 아래와 같이 쿼리 결과 위의

SELECT `prd_id`, `user_id` , count('prd_id') as cont , max(`amnt`) as highestamt,disc 
FROM `proddtails` 
group by `prd_id` order by `prd_id` 

: 두 번째 by user_id를 들어

prd_id | user_id | cont | highestamt | disc 
10  | 2  | 2 | 300  | 11 
20  | 2  | 2 | 100  | 11 
30  | 2  | 1 | 100  | 11 
40  | 2  | 1 | 600  | 11 

내가 쿼리 될 것입니다 무엇을 얻고 있지 않다 (user_id,disc 적절한 오지 않아).

감사

UPDATE : HARSHIL에 대한

감사 : user_id를에 대한 하지만 PRD_ID 잘 작동 : 초 http://www.sqlfiddle.com/#!9/e04063/1 :

하지만 좀 더 기입 한 후, 난이 버그를 발견 http://www.sqlfiddle.com/#!9/5325a6/5/1 (첫 번째 쿼리)

(210)

하지만 나는 다음과 같이합니다 : 널 (null)이없는

가 null로

user_id cont bid_on_prd_id winner_on_bid_prod_id 
2   4  10,20,30,40    10,40 
3   1  20      20 
4   1  30      30 

을 USER_ID USER_ID (하지만 내 WAMP 서버에 내가 USER_ID = 대한 winner_on_bid_prd_id에 널 (null)이 표시되지 않습니다 1, null 대신 값 10을 얻음)

user_id cont bid_on_prd_id winner_on_bid_prod_id 
1   1   10     (null) 
2   4  10,20,30,40    10,40 
3   1  20      20 
4   1  30      30 
+0

은'user_id' 및 추가 'disc' GROUP BY' –

+0

'로 난 PRD_ID 266 디스크 그룹화 할 경우 .. . 그 결과는 prd_id에 의해 그룹없이 출력 해주세요.모든 그룹에 대해 하나의 연속입니다. 모든 값을 나열합니다. – user3209031

+0

그룹에서 쉼표로 구분 된 목록을 얻으려면'GROUP_CONCAT'을 사용하십시오. – Barmar

답변

4

Fo R의 PRD_ID : usr_id 들어

select t1.prd_id,t1.user_id, 
(select count(*) from tablename where prd_id = t1.prd_id)as cont, 
t1.amnt as highststatment, 
t1.dis as disc 
from tablename t1 
where (t1.prd_id,t1.amnt) in 
(select prd_id, max(amnt) from tablename group by prd_id) 
group by t1.prd_id; 

:

select t1.user_id, 
     count(*) as cont, 
     Group_concat(t1.prd_id separator ',') as bid_on_prd_id, 
     (select Group_concat(distinct t2.prd_id separator ',') 
     from tablename t2 
     where t2.user_id = t1.user_id 
     and (t2.id) in 
        (select min(id) from tablename 
         where (prd_id,amnt) in 
           (select prd_id,max(amnt) from tablename group by prd_id) 
         group by prd_id 
        ) 
     ) as winner_on_bid_prod_id 
from tablename t1 
group by t1.user_id 
having winner_on_bid_prod_id IS NOT NULL; 

Click here for UPDATED DEMO

+0

예, prd_id에 대해 (여러 개의 데이터로 테스트 할 것입니다 ...하지만 이제 결과가 필요함) .... 그리고 user_id에 대한 두 번째 .. 그걸 도울 수 있니? – user3209031

+0

. 그 일에만 노력하고 있습니다. –

+0

user_id에 대한 쿼리를 시도하십시오. –

관련 문제