【问题标题】:SELECT all data from a table but adding a count field for a particular column value从表中选择所有数据,但为特定列值添加计数字段
【发布时间】:2013-01-09 17:21:42
【问题描述】:

我想通过在结果中添加countField 来计算特定表中的所有数据SELECT,以计算所有结果中对应的Item.ResourceId 存在的次数。

SELECT Name, ResourceId, (SELECT COUNT(ResourceId) FROM Item GROUP BY ResourceId) AS foo
FROM Item

关于如何做到这一点的任何想法?

【问题讨论】:

  • 你不需要GROUP BY
  • 是的,就像尼尔说的那样,分组看起来不合适。如果有的话,您可能希望使用 where 子句过滤嵌套的 select 语句,以仅计算与当前行的 ResourceId 匹配的项目。不过,不知道这是否是陈述的最佳形式。

标签: c# sql linq


【解决方案1】:

如果这是您想要的查询

SELECT Name, ResourceId, COUNT(*) FROM Item GROUP BY Name, ResourceId;

它按如下方式转换为 LINQ。

var result = items.GroupBy(item => new { item.Name, item.ResourceId })
                  .Select(group => new { group.Key.Name, group.Key.ResourceId, Count = group.Count() })
                  .ToList();

或者你想要这个查询?

SELECT Name,
       ResourceId,
       (SELECT COUNT(*) FROM Item y WHERE y.ResourceId = x.ResourceId)
FROM
       Item x;

这将转换为以下 LINQ 表达式。

var result = items.Select(item => new
             {
                 item.Name,
                 item.ResourceId,
                 Count = items.Count(x => x.ResourceId == item.ResourceId)
             }).ToList();

给定以下输入

Name   ResourceId
-----------------
 A      1
 A      1
 B      1
 B      2
 B      2
 C      3

第一个查询产生

Name   ResourceId   Count
-------------------------
 A      1            2
 B      1            1
 B      2            2
 C      3            1

而第二个查询产生这个。

Name   ResourceId   Count
-------------------------
 A      1            3
 A      1            3
 B      1            3
 B      2            2
 B      2            2
 C      3            1

【讨论】:

  • 就是这样。非常感谢 :) 也感谢所有试图提供帮助的人
  • 上次我在这里没有机会告诉您您的第二个答案是我正在寻找的解决方案。也感谢查询的 linq 版本
【解决方案2】:

这行得通吗?

SELECT resourceId, count(resourceId) FROM Item GROUP BY resourceId

【讨论】:

  • 确实如此,我已经做到了。问题是我希望在选择名称时列出所有表数据并进行分组会导致 sql 错误(名称具有不同的值并且无法组合)
【解决方案3】:

SELECT 名称、ResourceId、ResourceIdCount 来自第 i 项 内部联接 ( SELECT ResourceId, COUNT(ResourceId) AS ResourceIdCount FROM Item GROUP BY ResourceId ) 我知道了 ON i.ResourceId = ic.ResourceId

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 2016-12-10
    相关资源
    最近更新 更多