如何使用 PGX for Goland 从 PosgreSQL 数据库扫描总和值

问题描述 投票:0回答:1

我在使用 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 控制台中运行此查询时,它返回正确的值。

postgresql go sum pgx
1个回答
0
投票

您的查询返回单个标量,

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)

© www.soinside.com 2019 - 2024. All rights reserved.