首页 > 解决方案 > SQL 语句对列计数 49 次而不是一次

问题描述

我创建了一个 SQL 语句来将 LinkId 显示为索引,并计算 LinkId 在表中出现的次数,并以点击为标题并获得百分比。我想从两个表中相同 LinkId 的不同表中添加链接的 URL 以显示,但是当我添加内部连接时,它对每个 LinkId 计数 49 次。为什么我得到 49 而不是 1 的输出,我该如何解决这个问题?

InnerJoin 之前

输入:

SELECT DISTINCT
    LinkId [Index],
    COUNT(*) OVER (PARTITION BY LinkId) [Clicks],
    CONVERT(VARCHAR(10), COUNT(*) OVER (PARTITION BY LinkId) * 100 / COUNT(*) OVER (PARTITION BY 1)) + '%' [Percent]
FROM
    Track_Click_7
WHERE
    CampaignId = 24896;

输出:

 Index  |  Clicks |  Percent
   26   |    1    |    50%
   37   |    1    |    50%

添加内连接后:

SELECT DISTINCT
    Track_Click_7.LinkId [Index], 
    Campaign.Link,
    COUNT(*) OVER (PARTITION BY Track_Click_7.LinkId) [Clicks],
    CONVERT(VARCHAR(10), COUNT(*) OVER (PARTITION BY Track_Click_7.LinkId) * 100 / COUNT(*) OVER (PARTITION BY 1)) + '%' [Percent]
FROM
    Track_Click_7
INNER JOIN 
    Campaign ON Track_Click_7.CampaignId = Campaign.CampaignId
WHERE
    Track_Click_7.CampaignId = 24896;

输出:

  Index  |  Link   | Clicks |  Percent
    26   | URL.... |   49   |    50%
    37   | URL.... |   49   |    50%

期望的输出:

   Index  |  Link   | Clicks |  Percent
     26   | URL.... |    1   |    50%
     37   | URL.... |    1   |    50%

标签: sqlsql-server

解决方案


推荐阅读