DB2 SQL基于加权选择不同的数据

时间:2017-05-04 15:03:35

标签: sql select distinct db2-400

我有一个类别表,每个类别都有一个权重。

我有一个他们出现的产品和类别表,并希望选择每个产品的权重最高的类别。

我尝试使用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种产品,需要执行大量查询。

1 个答案:

答案 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;