2011-01-15 16 views
4

3つのテーブルがあります。私はitem.nameでグループ化し、idetailで見つけることができる時間を数えたいと思います。このクエリは、グループ化されていない行をすべてカウントします。グループ化されたSQLサーバーの数

誰でもどのように修正することができますか?

SELECT i.name, COUNT(i.name) 
FROM item AS i 
INNER JOIN item_category AS ic ON i.i_category_id = ic.ic_id 
INNER JOIN idetail AS id ON ic.ic_id = id.id_category_id 
WHERE ic.ic_id = 1002 
GROUP BY i.name 
+0

何かが間違っている必要がありますか、私が何かを見逃しています。 'このクエリは列でグループ化されていないすべての行のみをカウントします'私は見ることのできるところから、このスクリプトはグループ化して 'COUNT(*)'を計算して正しく実行します。 .name'ではなく、すべての行の数です。あなたは実際にどのような出力を得ますか? –

+0

私はまた、あなたが実際に望んでいるものについてちょっと混乱しています。おそらくあなたは 'SELECT COUNT(DISTINCT i.name) 'のようなものを意図しています。 。 .'または 'SELECT i.name、COUNT(id.id_id)FROM。 。 。 LEFT JOINのidetail id。 。 。 GROUP BY i.name'? –

答えて

1

これは、あなたが望むものである:

select x.name 
    , count(*) as cntNames 
    , sum(x.cntDetails) as cntDetails 
    from (
     SELECT i.name, COUNT(*) as cntDetails 
      FROM item AS i 
     INNER JOIN item_category AS ic ON i.i_category_id = ic.ic_id 
     INNER JOIN idetail AS id ON ic.ic_id = id.id_category_id 
     WHERE ic.ic_id = 1002 
      -- NOTICE THE 2nd Value in the group by! 
     GROUP BY i.name,id.id_category_id 
     ) x 
    group by name 
1
Select Count(*) 
From (
      Select i.name, Count(i.name) 
      From item As I 
       Join item_category As ic 
        On ic.ic_id = i.category_id 
       Join idetail as ID 
        On ID.id_category_id = ic.ic_id 
      Where ic.ic_id = 1002 
      Group By i.name 
      ) As Z 

あなたはすべての3つの列をしたいとあなたはSQL Serverの2005+を使用している場合は、SQL Serverの2005+

With Items As 
    (
    Select I.name, Count(i.name) As ItemCount 
    From item As I 
     Join item_category As ic 
      On ic.ic_id = i.category_id 
     Join idetail as ID 
      On ID.id_category_id = ic.ic_id 
    Where ic.ic_id = 1002 
    Group By i.name 
    ) 
Select Name, ItemCount 
    , (
     Select Count(*) 
     From Items 
     ) As OverallCount 
From Items 

もう一つの簡単なバージョンを使用している場合。

Select i.name 
    , Count(i.name) As CountByName 
    , Count(*) Over() As TotalCount 
From item As I 
    Join item_category As ic 
     On ic.ic_id = i.category_id 
    Join idetail as ID 
     On ID.id_category_id = ic.ic_id 
Where ic.ic_id = 1002 
Group By i.name 
関連する問題