2016-06-22 3 views
2

가 표 3카운트에 기초

ITEM -itemID

2.INVENTORY

-quantity

3.CHARACTERS

-charID

항목 1 --- 많은 인벤토리 8 ---- 1 문자

캐릭터 인벤토리에 쌓인 가장 많이 쌓인 아이템과 인벤토리에이 아이템이 누적 된 상위 10 개 아이템을 찾고 싶습니다. 그래서 결국 itemID 1은 4 스택을 가지며,이 charID는 아이템을 가지며, itemID 2는 3 스택을 가지며 이러한 charID는 아이템을가집니다. 테이블에. 나는 잠시

SELECT COUNT(INVENTORY.itemID) as Stacks, ITEM.itemID, CHARACTERS.charName 
FROM INVENTORY 
INNER JOIN ITEM 
ON INVENTORY.itemID = ITEM.itemID 
JOIN CHARACTERS 
ON INVENTORY.charID = CHARACTERS.charID 
WHERE INVENTORY.quantity>1 
GROUP BY ITEM.itemID 
ORDER BY Stacks DESC 
GO 

나는 집계 오류가 발생하고 있는데이 쿼리

Column 'CHARACTERS.charName' is invalid in the select list because it is not   
contained in either an aggregate function or the GROUP BY clause. 

어떤 도움을 해결하는 방법을 잘 모릅니다이 일을하려고 이후에 현재 어딘지

입니다 환영합니다 감사합니다 :). 제 질문 형식이 동등하지 않은 경우 개선 할 수있는 의견을 남겨주십시오.

답변

2

는 그냥 GROUP BY 절에 charName를 추가하거나 집계 함수와 함께 포장 : 같은

최종 쿼리해야 내 지식

SELECT COUNT(INVENTORY.itemID) as Stacks, ITEM.itemID, MAX(CHARACTERS.charName) 
FROM INVENTORY 
INNER JOIN ITEM 
ON INVENTORY.itemID = ITEM.itemID 
JOIN CHARACTERS 
ON INVENTORY.charID = CHARACTERS.charID 
WHERE INVENTORY.quantity>1 
GROUP BY ITEM.itemID 
ORDER BY Stacks DESC 
GO 

만 MySQL은 GROUP BY로를 수용 전체 선택 세트 세트를 포함하지 않습니다. 각 열은 GROUP BY 절 또는 COUNT/MAX/MIN..

+0

과 같은 집계 함수로 래핑되어야합니다. 쿼리가 실행됩니다. itemID 1이 (가)이 두 charName에 의해 두 번 겹쳐서 표시되는 대신 대단히 감사합니다. 대신 두 개의 다른 행에 제안 사항이 있습니까? @sagi – Tristan

+0

@Tristan 지금 사용해보기 – sagi

0

group by 절에 'CHARACTERS.charName'을 (를) 추가해보십시오.

SELECT COUNT(INVENTORY.itemID) as Stacks, ITEM.itemID, CHARACTERS.charName 
FROM INVENTORY 
INNER JOIN ITEM 
ON INVENTORY.itemID = ITEM.itemID 
JOIN CHARACTERS 
ON INVENTORY.charID = CHARACTERS.charID 
WHERE INVENTORY.quantity>1 
GROUP BY ITEM.itemID, CHARACTERS.charName 
ORDER BY Stacks DESC 
GO