GROUP BY、HAVING 和 COUNT 以获得聚合结果
GROUP BY, HAVING, and COUNT to get aggregated results
我看过一些关于使用这三个函数的帖子,但我无法根据阅读的内容获得我想要的结果。
我正在使用 SQL SERVER 2012。table 是 APXFirm.AdvApp.vPerformance
这是 table 架构
我尝试了以下查询:
USE APXFirm
SELECT PortfolioBaseCode
,COUNT( portfoliobasecode) AS Pcount
FROM APXFirm.AdvApp.vPerformance
WHERE rowtypecode = 'd'
and DetailKeyCode is NOT NULL
and NetOrGrossCode = 'n'
and DetailKeyCode <> 'us'
and PortfolioBaseCode IN ('test','test2')
GROUP BY PortfolioBaseCode,
NetOrGrossCode,
RowTypeCode ,
DetailKeyCode ,
MarketValue
HAVING marketvalue > 1
但这给了我这样的结果:
PortfolioBaseCode Pcount
test 1
test 1
test 1
test2 1
test2 1
test2 1
test2 1
我想要这样的结果
PortfolioBaseCode Pcount
test 3
test2 4
我不确定我是否需要子查询、联接或在计数中使用 distinct 来实现此目的或其他目的。我也试过这条线,但它没有改变结果。
,COUNT( DISTINCT portfoliobasecode) AS Pcount
谢谢
替换
HAVING marketvalue > 1
和
HAVING Pcount > 1
group by
中的列过多。我想你只是想要:
SELECT PortfolioBaseCode, COUNT( portfoliobasecode) AS Pcount
FROM APXFirm.AdvApp.vPerformance
WHERE rowtypecode = 'd' AND
DetailKeyCode is NOT NULL AND
NetOrGrossCode = 'n' AND
DetailKeyCode <> 'us' AND
PortfolioBaseCode IN ('test', 'test2')
GROUP BY PortfolioBaseCode
HAVING SUM(marketvalue) > 1;
我实际上不确定 HAVING
子句应该做什么。也许你可以删除它。也许您可以将逻辑 marketvalue > 1
移动到 WHERE
子句。
我看过一些关于使用这三个函数的帖子,但我无法根据阅读的内容获得我想要的结果。
我正在使用 SQL SERVER 2012。table 是 APXFirm.AdvApp.vPerformance 这是 table 架构
USE APXFirm
SELECT PortfolioBaseCode
,COUNT( portfoliobasecode) AS Pcount
FROM APXFirm.AdvApp.vPerformance
WHERE rowtypecode = 'd'
and DetailKeyCode is NOT NULL
and NetOrGrossCode = 'n'
and DetailKeyCode <> 'us'
and PortfolioBaseCode IN ('test','test2')
GROUP BY PortfolioBaseCode,
NetOrGrossCode,
RowTypeCode ,
DetailKeyCode ,
MarketValue
HAVING marketvalue > 1
但这给了我这样的结果:
PortfolioBaseCode Pcount
test 1
test 1
test 1
test2 1
test2 1
test2 1
test2 1
我想要这样的结果
PortfolioBaseCode Pcount
test 3
test2 4
我不确定我是否需要子查询、联接或在计数中使用 distinct 来实现此目的或其他目的。我也试过这条线,但它没有改变结果。
,COUNT( DISTINCT portfoliobasecode) AS Pcount
谢谢
替换
HAVING marketvalue > 1
和
HAVING Pcount > 1
group by
中的列过多。我想你只是想要:
SELECT PortfolioBaseCode, COUNT( portfoliobasecode) AS Pcount
FROM APXFirm.AdvApp.vPerformance
WHERE rowtypecode = 'd' AND
DetailKeyCode is NOT NULL AND
NetOrGrossCode = 'n' AND
DetailKeyCode <> 'us' AND
PortfolioBaseCode IN ('test', 'test2')
GROUP BY PortfolioBaseCode
HAVING SUM(marketvalue) > 1;
我实际上不确定 HAVING
子句应该做什么。也许你可以删除它。也许您可以将逻辑 marketvalue > 1
移动到 WHERE
子句。