sql查找组列a和列B的重复项,其中列在c中计数

2izufjch  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(329)

这可能实际上已经张贴,但建议的问题没有显示任何光和寻找正确的话标题本身就是一项任务。
给定这3列,我正在尝试找到正确的sql查询,以便在特定条件下管理重复项:

ColumnA | ColumnB | ColumnC
---------------------------
   1    |    1    |   A
   1    |    2    |   A
   2    |    2    |   B
   2    |    2    |   A
   2    |    2    |   B
   1    |    2    |   B

所以我的计数器应该是出现的次数-c的条件规则是columna可以分配给columnb的个数,其中columnc是a或b,并且计数为1。如果columna被分配给columnb的编号,并且columnc中有第二个a或b,则该值计为2(1/1/a 1/1/b=1)(1/1/a 1/1/a=2)。
下表等于4:
1/1/a=1
1/2/a=1
2/2/b=1
2/2/a=0
2/2/b=1
1/2/b=0
在c语言中,我对存储值和比较枚举数进行了一些管理,以进行检查

//If the hash table fails to add due to a duplicate then thats a second count of it existing (and breaks the rule of 1 per A and B
if(!hash.Add(new Tuple<int, int, ColumnType>(itemA.ColumnA, itemA.ColumnB, itemA.ColumnC)))
{
    count++;
}
else
{
    //If the table contains the counter part (so if this is 1/1/A is there a 1/1/B)
    if(hash.Contains(new Tuple<int, int, ColumnType>(itemA.ColumnA, itemA.ColumnB, (itemA.ColumnC == ColumnType.A ? ColumnType.B : ColumnType.A))))
    {
        //There is so take a point off as thats allowed
        count--;
    }
    else
    {
        //The item was added to the hash table normally and theres no counter part
        count++;
    }
}

当然,我正在研究如何提高效率,hash集的使用是另一个类的替代品,这个类只负责添加和遍历一个较慢的字典。这比那快,我假设通过sql命令直接引用count会更快。

aiqt4smr

aiqt4smr1#

你可以做:

int count = YourTable.GroupBy(x=> new {x.ColumnA, x.ColumnB, x.ColumnC})
.Select(g => g.Key)
.Distinct()
.Count();

相关问题