【发布时间】:2022-01-22 15:50:24
【问题描述】:
我有一个名为financial_transaction 的表,其中包含如下数据:
| id | debit | credit | financial_type | payment_id | payment | author_id | author
1 150 0 Payment 2 1
2 0 50 Payment 2 1
所以我希望从这些数据中:
- 按
payment_id分组。 - 包括对
author的真实。 - 将所有
debits和credits相加。 - 显示
financial_type和payment_id等字段。
这就是我想要的:
[
{
payment_id: 2,
author: {
first_name: John,
last_name: Doe
}
debit: 150,
credit: 50,
financial_type: Payment
}
]
这也是我的 Prisma Scehma:
enum FinancialType {
Payment
Expense
Withdraw
}
用户表
model User {
id Int @id @default(autoincrement())
first_name String
last_name String
saved_payments Payment[]
saved_financial_transactions FinancialTransaction[]
}
付款表
model Payment {
id Int @id @default(autoincrement())
payed_price Decimal
remaining_price Decimal?
price_per_month Decimal
financial_transactions FinancialTransaction[]
author User? @relation(fields: [author_id], references: [id])
author_id Int?
}
财务交易表
model FinancialTransaction {
id Int @id @default(autoincrement())
debit Decimal
credit Decimal
financial_type FinancialType
payment Payment @relation(fields: [payment_id], references: [id])
payment_id Int
author User? @relation(fields: [author_id], references: [id])
author_id Int?
}
我试图用 prisma groupBy 得到这个,如下所示:
const financia_transactions = wait prisma.$queryRaw`select jsonb_agg(to_jsonb(t)) from
(
select payment_id,
jsonb_build_object('first_name', u.first_name, 'second_name', u.second_name) author,
sum(debit) debit,
sum(credit) credit,
max(financial_type) financial_type,
from "FinancialTransaction" as ft join "User" u on ft.author_id = u.id
group by payment_id
) t;`;
但这不起作用... 所以我的问题是 prisma 有什么办法可以做到这一点?
【问题讨论】:
标签: database postgresql prisma