2016-06-22 18 views
2

あり3、表は、カウントに基づいて

ITEM -itemID

2.INVENTORY

-quantity

3.CHARACTERS

-charID

ITEM 1 ---多数INVENTORY 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が2つのcharNameによって2回積み上げられている代わりに、2つの異なる任意の提案を行ですか? @サギ – 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 
関連する問題