1
编辑:我做了一个错误的写作WHERE Users.Username=?
代替WHERE Answers.Username=?
SQL AVG()函数返回INT时多列
如果我用下面的语句,我得到正确的平均3.33:
public final String SELECT_USER_AND_AVGANSWERS_STMT =
"SELECT AVG(CAST(Answers.Rating AS FLOAT)) FROM Answers "
+ "WHERE Answers.Username=?";
通知我只是选择AVG。当我尝试选择更多的列时,它返回4,因为它将其四舍五入。
public final String SELECT_USER_AND_AVGANSWERS_STMT =
"SELECT Users.Username, Users.Nickname, AVG(CAST(Answers.Rating AS FLOAT)) "
+ "FROM Users, Answers "
+ "WHERE Users.Username=?"
+ "GROUP BY Users.Username, Users.Nickname";
用户表:
"CREATE TABLE Users(Username VARCHAR(10) PRIMARY KEY,"
+ "Password VARCHAR(8) NOT NULL,"
+ "Nickname VARCHAR(20) NOT NULL,"
+ "Description VARCHAR(50),"
+ "Photo VARCHAR(4000))";
答案表:
"CREATE TABLE Answers(AnswerID INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,"
+ "QuestionID INTEGER NOT NULL,"
+ "SubmittedTime TIMESTAMP NOT NULL,"
+ "Text VARCHAR(300) NOT NULL,"
+ "Username VARCHAR(10) NOT NULL,"
+ "Rating INTEGER DEFAULT 0 NOT NULL)";
使用Java /嵌入式Derby数据库。
感谢您的帮助。
是一个不错的主意,没工作,虽然:( – ImZyzzBrah
尝试新的解决方案 – JCollerton
不,我试图把CAST的一切准备,仍然无法正常工作,找在你的解决方案,你会认为它会工作,但仍然想知道为什么它不起作用。 – ImZyzzBrah