0

次の表があります。

+----+-----------+-----+
| p1 | p2 | model| res |
+----+-----------+-----+
|  1 | a  | dog  |  1  |
|  2 | a  | dog  |  2  |
|  1 | b  | dog  |  3  |
|  2 | b  | dog  |  4  |
|  1 | a  | cat  |  10 |
|  2 | a  | cat  |  2  |
|  1 | b  | cat  |  10 |
|  2 | b  | cat  |  1  |
+----+-----------+-----+

私が望むのは、p1 と p2 の組み合わせごとに、すべてのモデルの解像度の合計が最小になるものを選択することです)。この場合の合計スコアは次のとおりです。

p1=1, p2=a: 1+10=11
p1=2, p2=a: 2+2=4
p1=1, p2=b: 3+10=13
p1=2, p2=b: 4+1=5

したがって、次の表を取得したいと思います。

+----+-----------+-----+
| p1 | p2 | model| res |
+----+-----------+-----+
|  2 | a  | dog  |  2  |
|  2 | a  | cat  |  2  |
+----+-----------+-----+

注: さらに p 列が存在する場合があります (つまり、p3、p4、...)。

上記の目的のテーブルを取得するには、どの SQL 選択クエリを使用する必要がありますか?

4

2 に答える 2

2

http://sqlfiddle.com/#!7/af26b/5

SELECT t1.*
FROM TEST t1
JOIN (
  SELECT p1, p2
  FROM TEST
  GROUP BY p1, p2
  ORDER BY SUM(res)
  LIMIT 1) t2 ON t1.p1 = t2.p1 AND t1.p2 = t2.p2
于 2013-08-11T14:38:40.810 に答える
0

このようなものは役に立ちますか?

select * from the_table
group by model          # do it for each distinct model
order by res ascending  # to get the lower ones first so that limit can pick them
limit 1                 # for each group, i think it will do that.
于 2013-08-11T14:39:01.180 に答える