[英]SQL Server Count on a grouped by
我有3张桌子。 我想按item.name分组并计算它在idetail中可以找到的次数。 该查询仅计算所有行,不按行分组。
有人知道如何解决吗?
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
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
如果您希望所有三列都在使用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
如果您使用的是SQL Server 2005+,则是另一个更简单的版本。
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
这就是你想要的:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.