谁能告诉我为什么下面的查询似乎返回存在百分比值为0的行。
func Write_profit_table(profitWriteChannel chan string, profitType string, req *http.Request) {
var profitReq profitReq;
err := json.NewDecoder(req.Body).Decode(&profitReq);
if err!=nil{
log.Panic(err)
}
NotInDB, _ := Search_userinfo_table(profitReq.Email)
if NotInDB == false {
var lastInsertId int
err2 := db.QueryRow("INSERT INTO profit(email, type, dateArray, amount, interest, compounded, recurring, name, description, profitFrom)
VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) returning uid;",
profitReq.Email, profitReq.Type, pq.Array(profitReq.DateArray), profitReq.Profit, profitReq.Interest,
profitReq.Compounded, profitReq.Recurring, profitReq.Name, profitReq.Description, profitReq.ProfitFrom).Scan(&lastInsertId);
if err2!=nil{
log.Panic(err2)
}
}
profitWriteChannel<-"finished writing to profit"
}
我可以在查询中添加'&& percent> 0'以将其过滤掉,但MAX函数应该只过滤每个国家/地区代码的最大百分比?
答案 0 :(得分:0)
尝试这样修改;
SELECT cl.countrycode, c.name, c.continent, cl.language
FROM country c
JOIN countrylanguage cl ON cl.countrycode = c.code
WHERE Percentage = (SELECT MAX(Percentage) FROM countrylanguage cl2 where cl2.countrycode=cl.countrycode)
答案 1 :(得分:0)
这是您的查询:
SELECT cl.countrycode, c.name, c.continent, cl.language
FROM country c JOIN
countrylanguage cl
ON cl.countrycode = c.code
WHERE Percentage = ANY (SELECT MAX(Percentage)
FROM countrylanguage
GROUP BY countrycode
);
子查询返回所有百分比,该百分比是任何国家/地区的最大值。在某些国家/地区,0
是最大值。您可以独立运行查询以查看此内容。
然后,外部查询会找到与 any 国家/地区的最大值匹配的任何百分比。真的没有道理。
您想要的是每个国家/地区的最大数量。为此,请使用相关子查询:
SELECT cl.countrycode, c.name, c.continent, cl.language
FROM country c JOIN
countrylanguage cl
ON cl.countrycode = c.code
WHERE cl.Percentage = (SELECT MAX(cl2.Percentage)
FROM countrylanguage cl2
WHERE cl2.countrycode = cl.countrycode
);
区别在于子查询现在具有WHERE
子句,而不是GROUP BY
子句,要求国家/地区相同。