首页 > 解决方案 > TypeORM & Postgres:只计算来自多列的唯一不同值

问题描述

我有各种 SQL 查询,它们从 DB 中返回唯一/不同的值,(或计算它们),例如:

SELECT buyer as counterparty 
  FROM public.order
UNION
SELECT seller as counterparty 
  FROM public.order

或者

   SELECT COUNT(*)
   FROM (
     SELECT DISTINCT p
     FROM public.order
     CROSS JOIN LATERAL (VALUES(seller),(buyer)) AS C(p)
   ) AS internalQuery

我的表的示例结构:

id buyer   seller
0   A         B
1   B         A
2   B         D
3   D         A
4   A         D

期望的结果:

3 or A,B,D

我想用 TypORM 查询生成器重写它们,但我不知道如何替换CROSS JOIN LATERAL (VALUES(seller),(buyer)) AS C(p)UNION在我的情况下。在这种情况下, TypeORM的示例和文档覆盖率非常差。

有什么选择吗?

我已经看到了各种方法,例如.getCount可以.distinct(true)帮助我并轻松找到一列的解决方案。

所以我明白,如果我想找到确切的数字,而不是 doc 结果,我应该使用.getCount而不是.getMany

但我不明白,如何通过 typeORM 从多列中选择(和合并)值以接收来自多列的不同值。

我正在使用PostgrSQL,所以当我尝试时:

  const query = repository.createQueryBuilder('order')
    .distinctOn(['buyer', 'seller'])
    .limit(100)
    .getMany()

我收到每个字段中每个不同值的文档,所以3我得到的不是6值(3 个由 column1 不同,3 个由 column2 不同)

标签: sqlnode.jspostgresqlnestjstypeorm

解决方案


推荐阅读