我在使用 Golang 的 PGX 驱动器从 Postgres 数据库获取 sum() 值时遇到了麻烦。
这是我的代码:。我添加了第二个变量,因为该行返回两个值。
var cartItemPriceFloat float64 var secondary 变量字符串
row, err := global.Db.Query(context.Background(), "select sum(shopping_cart_rows.shopping_cart_row_product_quantity * products.product_price) as cart_item_price from shopping_cart_rows inner join products on products.product_id=shopping_cart_rows.shopping_cart_row_product_id where shopping_cart_rows.shopping_cart_row_user_id=$1", userId)
if err != nil {
fmt.Println("Error retrieving cart item price: ", err)
}
fmt.Println("The output from the query is ", row)
err2 := row.Scan(&cartItemPriceFloat, &secondVariable)
if err2 != nil {
fmt.Println("Error scanning query result into cartItemPriceFloat: ", err2)
}
fmt.Println("cartItemPriceFloat = ", cartItemPriceFloat)
fmt.Println("secondVariable = ", secondVariable)
终端输出为:
查询的输出为 &{0xc0003b6000 0xc0003ac7f0 } 将查询结果扫描到 cartItemPriceFloat 时出错:字段描述数量必须等于值数量,得到 1 和 0 购物车商品浮动价格 = 0 第二个变量=
我可能错过了一些简单的事情。我想要的只是 cartItemPriceFloat 的值。顺便说一句,当我在 Postgres 控制台中运行此查询时,它返回正确的值。
您的查询返回单个标量,
cart_item_price
:
select
sum(shopping_cart_rows.shopping_cart_row_product_quantity * products.product_price) as cart_item_price
from shopping_cart_rows
inner join products
on products.product_id=shopping_cart_rows.shopping_cart_row_product_id
where shopping_cart_rows.shopping_cart_row_user_id=$1
您必须仅扫描一个字段和一行。使用
QueryRow
代替:
queryString := `
select
sum(shopping_cart_rows.shopping_cart_row_product_quantity * products.product_price) as cart_item_price
from shopping_cart_rows
inner join products
on products.product_id=shopping_cart_rows.shopping_cart_row_product_id
where shopping_cart_rows.shopping_cart_row_user_id=$1
`
var cartItemPriceFloat float32
global.Db.QueryRow(context.Background(), queryString, userId).Scan(&cartItemPriceFloat)
fmt.Println(cartItemPriceFloat)