我有一个类别表,每个类别都有一个权重。
我有一个他们出现的产品和类别表,并希望选择每个产品的权重最高的类别。
我尝试使用Distinct,但它似乎并不想使用排序。
我的基本查询是:
public Map readFile(String filePath) {
Map<Integer, Element> elementsMap = new HashMap<>();
Scanner s;
try {
s = new Scanner(new File(filePath));
while (s.hasNextLine()){
String[] properties = s.nextLine().split(",");
Element element = new Element();
element.setAtomicNumber(Integer.parseInt(properties[0]));
element.setAtomicMass(Double.parseDouble(properties[1]));
element.setAtomicSymbol(properties[2]);
element.setAtomicName(properties[3]);
elementsMap.put(element.getAtomicNumber(), element);
}
s.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return elementsMap;
}
如果产品出现在多个类别中,我只想返回一行,其中包含产品和排名最高的类别。
这需要在DB2中工作,因为我需要在iSeries上运行它。
我希望我可以使用结果与主产品表进行比较以查看类别是否已更改,而无需阅读整个主产品表,并且每个产品都会找到具有最高权重的类别。有超过75,000种产品,需要执行大量查询。
答案 0 :(得分:2)
一种方法使用row_number()
:
select pc.*
from (select p.product, p.category,
row_number() over (partition by p.product order by weighting desc) as seqnum
from prodcattable p join
categorytable c
on p.category= c.category
) pc
where seqnum = 1;