Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: выбрать id которое повторяется максимальное количество раз
 
 автор: WebTech   (13.01.2006 в 17:29)   письмо автору
 
 

Есть таблица следующего типа

+-----+
| id  |
+-----+
| 1   |
| 5   |
| 5   |
| 3   |
| 4   |
| 4   |
| 4   |
+-----+

Надо выбрать id которое повторяется максимальное количество раз.
Решил это так

select id, count(id) as max_count from table group by id having count(id)>1 order by max_count desc limit 1;

выдаст

+----+-----------+
| id | max_count |
+----+-----------+
|  4 |         3 |
+----+-----------+

Можно как нибудь составить запрос, чтобы результирующая запись была одна, т.е. без limit? Ну, т.е. результирующих записей может быть и несколько в случае, если какой-то id повторяется одинаковое количество раз. Например в случае

+-----+
| id  |
+-----+
| 5   |
| 5   |
| 5   |
| 3   |
| 4   |
| 4   |
| 4   |
+-----+

Надо получить

+----+-----------+
| id | max_count |
+----+-----------+
|  5 |         3 |
|  4 |         3 |
+----+-----------+

   
 
 автор: Boss   (13.01.2006 в 18:02)   письмо автору
 
   для: WebTech   (13.01.2006 в 17:29)
 


select id, count(id) as 'max_count'
from nametable
group by id
having count(*) > 1

   
 
 автор: WebTech   (13.01.2006 в 18:27)   письмо автору
 
   для: Boss   (13.01.2006 в 18:02)
 

Так будут просто выбраны id, которые повторяются и количество повторений. А мне надо выбрать id, которые повторяются максимальное количество раз.

   
 
 автор: cheops   (13.01.2006 в 18:56)   письмо автору
 
   для: WebTech   (13.01.2006 в 18:27)
 

-

   
 
 автор: Boss   (13.01.2006 в 20:26)   письмо автору
 
   для: WebTech   (13.01.2006 в 18:27)
 

А почему limit не хочешь использовать?


select id, count(id) as 'max_count'
from nametable
group by id
order by max_count desc limit 1

   
 
 автор: WebTech   (14.01.2006 в 11:39)   письмо автору
 
   для: Boss   (13.01.2006 в 20:26)
 

Потому, что максимальных значений может быть несколько и сколько - заранее неизвестно. Непонятно тогда сколько подставлять в LIMIT.

   
 
 автор: cheops   (13.01.2006 в 18:58)   письмо автору
 
   для: WebTech   (13.01.2006 в 17:29)
 

Вложенные запросы можно использовать (версия MySQL выше 4.1)?

   
 
 автор: WebTech   (13.01.2006 в 19:02)   письмо автору
 
   для: cheops   (13.01.2006 в 18:58)
 

MySQL 4.1.7, можно использовать.

   
 
 автор: cheops   (14.01.2006 в 13:35)   письмо автору
 
   для: WebTech   (13.01.2006 в 19:02)
 

Попробуйте следующий запрос
SELECT id, COUNT(id) AS num 
FROM wet 
GROUP BY id
HAVING num = (SELECT COUNT(id) AS total 
              FROM wet 
              GROUP BY id 
              ORDER BY total DESC
              LIMIT 1)

   
 
 автор: WebTech   (14.01.2006 в 16:47)   письмо автору
 
   для: cheops   (14.01.2006 в 13:35)
 

Да, это работает как раз так, как надо.

Большое спасибо! :-)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования