我正在編寫一個程序,該程序需要在對該表執行一些插入和更新之前確定該表的打開值。有問題的表(在本例中為 PostgreSql)最初可能有零行。當我選擇期初值時,如果有零行,則余額值的總計將作為零返回。這會導致掃描失敗并顯示消息:Error on scan of test01 opening Row Count. Error = sql: Scan error on columnindex 1: converting string "<nil>" to a float64: strconv.ParseFloat:parsing "<nil>": invalid syntax雖然我可以通過做兩個選擇來“解決”問題,一個選擇 COUNT(*),另一個選擇 SUM(),如果行數超過零,這似乎不是一個優雅的解決方案,并且可能并不總是解決問題,并且選擇的兩個值(行數和余額總數)不在同一時間點。有沒有辦法通過選擇表格來解決這個問題?下面是一個說明問題的小測試程序。當表中有行被選中時,程序運行良好。但是,如果有零行,則會導致上述錯誤。示例測試程序:package mainimport ( "database/sql" "fmt" _ "github.com/lib/pq")var db *sql.DBfunc main() { var err error db, err = sql.Open("postgres", "user=test dbname=testdb password=test sslmode=disable") if err != nil { fmt.Sprintf("Failed to open Db Connection. Error = %s\n", err) return } defer fCloseDb() var row *sql.Row var sSql string = "SELECT COUNT(*), SUM(dbalance) FROM test01" if row = db.QueryRow(sSql); row == nil { println("No row returned selecting opening count(*) from test01") return } var iRowCount int64 = 0 var fBalTot float64 = 0.00 if err = row.Scan(&iRowCount, &fBalTot); err != nil { fmt.Printf("Error on scan of test01 opening Row Count. Error = %s\n", err) return } fmt.Printf("Row Count = %d, Balance total value = %.2f\n", iRowCount, fBalTot)}func fCloseDb() { if db != nil { db.Close() println("Db Closed") }}表的結構如下:sSql = "CREATE TABLE IF NOT EXISTS test01 " + "(ikey SERIAL Primary Key, " + "sname varchar(22) not null, " + "dbalance decimal(12,2) not null)"
1 回答

慕俠2389804
TA貢獻1719條經驗 獲得超6個贊
非常感謝,這有效:
"SELECT COUNT(*), coalesce(SUM(dbalance), 0.00) FROM test01"
我相信合并返回第一個非空值。
- 1 回答
- 0 關注
- 284 瀏覽
添加回答
舉報
0/150
提交
取消