MySql Group по - PullRequest
       9

MySql Group по

0 голосов
/ 27 мая 2009

Привет всем, поэтому у меня есть следующая таблица, 't1'

id     r_id     o_id     count
1       2       100       1
2       3       100       1
3       5       100       1
4       2       101       2
5       3       101       2
6       4       101       2

То, что я пытаюсь сделать, для данного списка r_id вернуть r_id и o_id, где число является наибольшим (максимальным). Поэтому в идеале, учитывая r_id 3 и 5, я бы получил следующее:

r_id      o_id
 5         100
 3         101

Я пробовал следующее:

select o_id, max(count), r_id from t1 where r_id IN (3, 5) group by r_id;

но это, похоже, не дает мне право связанного o_id. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 27 мая 2009

Как вы говорите, вы хотите r_id и o_id в качестве двух выходных столбцов ...:

SELECT r_id, o_id
FROM t1 AS a
WHERE r_id in (3, 5)
AND count =
  (SELECT MAX(count)
   FROM t1 AS b
   WHERE b.r_id = a.r_id
  )

Если существует более одного o_id с одинаковым «максимальным количеством» для определенного r_id, это вернет их все (вместо того, чтобы выбрать один из них произвольно).

В MySQL 5.1 с таблицей примеров:

mysql> select * from t1;
+------+------+------+-------+
| id   | r_id | o_id | count |
+------+------+------+-------+
|    1 |    2 |  100 |     1 | 
|    2 |    3 |  100 |     1 | 
|    3 |    5 |  100 |     1 | 
|    4 |    2 |  101 |     2 | 
|    5 |    3 |  101 |     2 | 
|    6 |    4 |  101 |     2 | 
+------+------+------+-------+
6 rows in set (0.00 sec)

этот запрос дает мне именно ваш запрошенный результат:

+------+------+
| r_id | o_id |
+------+------+
|    5 |  100 | 
|    3 |  101 | 
+------+------+
2 rows in set (0.31 sec)

Кстати, моя точная версия:

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.1.34    | 
+-----------+
1 row in set (0.00 sec)
0 голосов
/ 27 мая 2009

Сложнее, чем я думал на первый взгляд - это должно сработать:

select a.r_id,a.o_id from t1 a inner join (select r_id,max(count) as max from t1 group by r_id) as b on a.r_id = b.r_id and a.count = b.max where a.r_id in (3,5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...