在保留列的同时计算具有相同值的行

Posted

技术标签:

【中文标题】在保留列的同时计算具有相同值的行【英文标题】:Count rows with same value while keeping columns 【发布时间】:2020-02-19 20:15:00 【问题描述】:

假设我有以下 sql 表:

id  item_count  texture_count
30  82          205            
30  133         406             
35  253         658             
30  552         1004            
35  234         475             
35  119         288             
30  104         115            
36  594         1422            

如何修改我的选择查询以返回我的数据,其中包含一个额外的列,告诉我每个 ID 的出现次数,同时保持原始列的收集?这将导致:

id  item_count  texture_count   id_count
30  82          205             4
30  133         406             4
35  253         658             3
30  552         1004            4
35  234         475             3
35  119         288             3
30  104         115             4
36  594         1422            1

查询是这样的:

SELECT 
    CAST ((2 * FLOOR(idvalue / 2)) AS INT) as id, -- im creating an id based on this operation, currently id value is a float
    item_count,
    texture_count
FROM 
    db

【问题讨论】:

这能回答你的问题吗? Sql query to show count(*) of groups while keeping all rows of the group 请用您正在使用的数据库标记您的问题(您可能还想指定版本,特别是如果您正在运行 mysql,它仅支持最新版本的窗口函数)。 【参考方案1】:

如果您的数据库支持,您可以使用窗口函数。你所求的就如窗口一样简单count

select
    t.*,
    count(*) over(partition by id) id_count
from mytable

【讨论】:

以上是关于在保留列的同时计算具有相同值的行的主要内容,如果未能解决你的问题,请参考以下文章

应用 group_by 并汇总数据,同时保留所有列的信息

python pandas:删除A列的重复项,保留B列中具有最高值的行

Pandas - 在保留原始列的同时创建具有替换值的新列

SQL:根据另一列的值在列上保留一个具有最大值的行

聚合具有两个或多个具有相同值的列的行

分配多索引列,同时保留索引级别值的顺序