public Cursor fetchAllPBs() {
String sql = "SELECT * FROM " + CAPTURES_TABLE + " GROUP BY " + KEY_CAPTURES_SPECIES
+ " ORDER BY " + KEY_CAPTURES_POUNDS + " DESC, " + KEY_CAPTURES_OUNCES + " DESC, " + KEY_CAPTURES_DRAMS + " DESC;";
Cursor c = mDb.rawQuery(sql, null);
if(c != null) {
c.moveToFirst();
}
return c;
}
,你好我希望上面的查询返回每个物种的用户个人最佳,即每个物种中最重的物品。最近对它进行了适当的测试,我发现了一个问题。在这个项目中,我对SQL还是比较陌生的…
假设我在数据库中添加了一个7磅6盎司0drms的"Chub",然后添加了另一个7磅2盎司0drms的鱼-它将返回最近添加的鱼作为PB,而不是最大的(7磅2盎司)。然而,如果我再加一桶8磅0盎司0磅的鱼,它会返回8磅的鱼——似乎它不是按盎司来排序的,可能我也认为是按盎司来排序的。
谁能看出这里有什么问题并提出解决方案?多谢
首先,您需要一个子查询来确定每个物种最重的鱼。其次,你的权重被分成3列,所以你需要以某种方式添加它们。我选择用乘法将它们相加,应该足以得到最大值。
SELECT *
FROM CAPTURES_TABLE AS C1
WHERE (100*Pounds+10*Ounces+Drams) =
(SELECT MAX(100*Pounds+10*Ounces+Drams)
FROM CAPTURES_TABLE AS C2
WHERE C2.SPECIES=C1.SPECIES)
ORDER BY pounds DESC, ounces DESC, drams DESC
更多的注释,但我需要更多的空间…
如果我简化你的查询,它看起来像:
SELECT * FROM table1 WHERE species = species_id
ORDER BY pounds DESC, ounces DESC, drams DESC LIMIT 1
如果species是而不是唯一字段,则查询正常。
看起来问题在于,当添加一条新鱼时,您没有添加,而是实际上替换了鱼,尝试移除limit 1
,看看是否所有的鱼都出现了。
订购条款绝对正确。