【问题标题】:Entity Framework cross columns group by [closed]实体框架跨列分组 [关闭]
【发布时间】:2020-08-16 22:04:30
【问题描述】:

我有一张狗和品种表,每个品种名称都有 3 种气质,如下所示:

    NAME    |    TEMP1    |    TEMP2    |    TEMP3
------------+-------------+-------------+------------
   Check1   |   Angry     |     Shy     |    Ugly
   Check2   |   Rude      |    Cute     |    Shy
   Check3   |    Bla      |    Angry    |    Smelly

我想要一个跨越气质列并将它们分组到此的结果:

  Temp   |   COUNT(*)
---------+------------
 Shy     |      2
Angry    |      2
.
.
.

如果可能的话,如果您可以使用 Entity Framework 回答这篇文章,那就太好了(如果没有,可以用 SQL 编写它,我会将它(如果可能)转换为 Entity Framework)。

非常感谢!

【问题讨论】:

  • 请用您正在使用的数据库标记您的问题:sql-server、postgresql、mysql...?

标签: sql .net entity-framework count unpivot


【解决方案1】:

在支持横向连接的 SQL 数据库(例如 SQL Server、Postgres 或 Oracle)中,您通常会使用横向连接进行反透视,然后进行聚合:

select x.tmp, count(*) cnt
from mytable t
cross apply (values (temp1), (temp2), (temp3)) x(tmp)
group by x.tmp

在 Postgres 中,语法是 cross join lateral 而不是 cross apply

在其他数据库中,您可以使用 union all 进行 unpivot(这样效率较低,因为它需要多次表扫描):

select x.tmp, count(*) cnt
from (
    select temp1 tmp from mytable
    union all select temp2 from mytable
    union all select temp2 from mytable
) x
group by x.tmp

【讨论】:

  • 有效!但是你知道如何将其转换为实体框架吗?
  • @TalS:不,我不了解实体框架。您提到纯 SQL 解决方案对您来说是一个可以接受的选择,所以我用我知道的 SQL 来回答。
  • 我试图将其转换为实体框架,但我无法做到。如果有人可以提供帮助,那就太好了。
猜你喜欢
  • 2023-04-03
  • 2010-10-13
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2010-09-06
  • 1970-01-01
相关资源
最近更新 更多