You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按事件分组统计SQL Server用户投票表的热门反应

如何创建SQL Server视图汇总事件的最高得票反应?

我来帮你搞定这个需求!你需要处理一张记录用户对事件投票/反应的表,想要做个汇总视图,按事件分组展示每个事件里得票最多的反应对吧?先看你的示例表结构和测试数据:

DECLARE @voteTable AS TABLE ( 
    id INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, 
    eventId VARCHAR(255) NOT NULL , 
    isGroupA INT NOT NULL , 
    isGroupB INT NOT NULL , 
    userVote VARCHAR(255) NOT NULL 
); 

INSERT INTO @voteTable (eventId, isGroupA, isGroupB, userVote) 
VALUES 
    ('event1', 1, 0, 'like'),
    ('event1', 1, 0, 'like'),
    ('event1', 0, 1, 'dislike'),
    ('event2', 1, 0, 'laugh'),
    ('event2', 0, 1, 'laugh'),
    ('event2', 0, 1, 'sad');

解决方案:创建带排名逻辑的汇总视图

这里用SQL Server的窗口函数就能轻松实现,直接上创建视图的代码:

CREATE VIEW vw_TopVotePerEvent
AS
WITH VoteCounts AS (
    -- 第一步:统计每个事件下各反应的得票次数
    SELECT 
        eventId,
        userVote,
        COUNT(*) AS VoteCount
    FROM voteTable -- 记得替换成你实际的表名
    GROUP BY eventId, userVote
),
RankedVotes AS (
    -- 第二步:给每个事件内的反应按得票数排序
    SELECT 
        eventId,
        userVote,
        VoteCount,
        -- 按事件分组,得票数降序排列,排名第一的就是得票最多的
        ROW_NUMBER() OVER (PARTITION BY eventId ORDER BY VoteCount DESC) AS VoteRank
    FROM VoteCounts
)
-- 第三步:筛选出每个事件里排名第一的反应
SELECT 
    eventId,
    userVote AS TopReaction,
    VoteCount AS TopReactionVoteCount
FROM RankedVotes
WHERE VoteRank = 1;

额外说明

  • 如果你的场景允许多个反应并列得票最高(比如某事件里like和dislike票数相同),可以把ROW_NUMBER()换成RANK(),这样所有并列第一的反应都会被保留。
  • 视图创建完成后,直接执行SELECT * FROM vw_TopVotePerEvent就能看到每个事件的最高得票反应汇总结果啦!

内容的提问来源于stack exchange,提问作者potorik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:16:18