猿问

从 golang 在 mysql 上运行聚合连接查询不返回任何值

我有以下查询,它在直接从 mysql 运行时返回结果。


从 golang 程序运行时,相同的查询返回 0 值。


package main


import (

    "github.com/rs/zerolog/log"


    _ "github.com/go-sql-driver/mysql"

    "github.com/jmoiron/sqlx"

)


var DB *sqlx.DB



func main() {

    DB, err := sqlx.Connect("mysql", "root:password@(localhost:3306)/jsl2")

    if err != nil {

        log.Error().Err(err)

    }


    sqlstring := `SELECT

                        salesdetails.taxper, sum(salesdetails.gvalue), 

                        sum(salesdetails.taxamt) 

                FROM salesdetails

                    Inner Join sales ON sales.saleskey = salesdetails.saleskey

                where 

                sales.bdate >= '2021-12-01' 

                and sales.bdate <= '2021-12-31' 

                and sales.achead IN (401975)

                group by salesdetails.taxper

                order by salesdetails.taxper`


    rows, err := DB.Query(sqlstring)


    for rows.Next() {

        var taxper int

        var taxableValue float64

        var taxAmount float64


        err = rows.Scan(&taxper, &taxableValue, &taxAmount)


        log.Print(taxper, taxableValue, taxAmount)


    }


    err = rows.Err()


    if err != nil {

        log.Error().Err(err)

    }


}

在控制台上,运行程序会返回以下值。在 SQL 浏览器中,它返回 4 行,这是正确的。sql 浏览器对同一查询的结果是


0   1278.00     0.00

5   89875.65    4493.78

12  3680.00     441.60

18  94868.73    17076.37

但在程序中也返回 0 值的 4 行。


{"level":"debug","time":"2022-01-13T17:07:39+05:30","message":"0 0 0"}

{"level":"debug","time":"2022-01-13T17:07:39+05:30","message":"0 0 0"}

{"level":"debug","time":"2022-01-13T17:07:39+05:30","message":"0 0 0"}

{"level":"debug","time":"2022-01-13T17:07:39+05:30","message":"0 0 0"}

如何设置聚合函数的数据类型。


Cats萌萌
浏览 87回答 1
1回答

翻翻过去那场雪

我将 taxper 的数据类型更改为 float 并且它起作用了。我在检查 rows.Scan( 正如@mkopriva 所建议的那样检查错误后发现了这个
随时随地看视频慕课网APP

相关分类

Go
我要回答