powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет записей и вывод макс. значения.
12 сообщений из 12, страница 1 из 1
Подсчет записей и вывод макс. значения.
    #38663104
greenGreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
 [code=plaintext]Здравствуйте уважаемые форумчане. Cтолкнулся с проблемой.

Имеется таблица sale.
Структура:
id - id продажи
id_shopper - id покупателя
id_goods - id товара

Задача: Вывести ID'ы покупателей, купивших больше всего товаров.

Выполняю следующий запрос:

select
  id_shopper, max(num_goods)
from
(
  select id_shopper,
     count(id_shopper) as num_goods 
  from
     sales
  group by id_shopper
) as tmp;

В итоге получаю вот такой результат:
+------------+----------------+
| id_shopper | max(num_goods) |
+------------+----------------+
|          1 |              7 |
+------------+----------------+

Он не корректен, так как вот такой запрос:
select
  id_shopper,
  count(id_goods)
from
  sales
group by
  id_shopper;

Возвращает следующее:
+------------+----------------+
| id_shopper | count(id_goods) |
+------------+----------------+
          1              4 
          2              4
          3              7
          4              7

По идее первый запрос должен был вернуть записи

id_shopper  count(id_goods)
          3              7
          4              7

Пожалуйста, помогите разобраться с проблемой.
Заранее спасибо.
...
Рейтинг: 0 / 0
Подсчет записей и вывод макс. значения.
    #38663120
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к сожалению (или к счастью), в mysql нет with ties, так что как-то так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select 
  t1.id_shopper  
from 
(select 
  id_shopper ,count(idgood) c
from sales group by 1
) t1 join
(
 select  id_shopper, count(id_goods) c
 from sales
 group by 1
 order by 2 desc limit 1
) t2 on t1.c=t2.c
...
Рейтинг: 0 / 0
Подсчет записей и вывод макс. значения.
    #38663124
greenGreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ого 0_0. tanglir, большое Вам спасибо. Не ожидал, что придется так закрутить) Проблема в том, что в тестовой табличке 22 записи, а запрос отработал за 4 с. Попробую еще поискать альтернативные решения. Если попытка будет успешной, отпишу сюда.
Еще раз спасибо.
...
Рейтинг: 0 / 0
Подсчет записей и вывод макс. значения.
    #38663131
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greenGreenОго 0_0. tanglir, большое Вам спасибо. Не ожидал, что придется так закрутить) Проблема в том, что в тестовой табличке 22 записи, а запрос отработал за 4 с. Попробую еще поискать альтернативные решения. Если попытка будет успешной, отпишу сюда.
Еще раз спасибо.

интересно, можно ли написать

....
select max(count(id_goods)) c
from sales
group by id_shopper
......
...
Рейтинг: 0 / 0
Подсчет записей и вывод макс. значения.
    #38663132
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
greenGreenПроблема в том, что в тестовой табличке 22 записи, а запрос отработал за 4 с.ну это точно не в запросе дело, на 22 записях любой подобный запрос должен отработать за миллисекунды
...
Рейтинг: 0 / 0
Подсчет записей и вывод макс. значения.
    #38663133
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

по-моему нет
да и зачем, ордербай + лимит 1 делает ровно то же самое
...
Рейтинг: 0 / 0
Подсчет записей и вывод макс. значения.
    #38663138
greenGreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,javajdbc интересно, можно ли написать

....
select max(count(id_goods)) c
from sales
group by id_shopper
......

Нет, выдает вот такое сообщение: Invalid use of group function
Версия MySQL: 5.6.19

tanglir,
tanglir ну это точно не в запросе дело, на 22 записях любой подобный запрос должен отработать за миллисекунды
Вы правы. Глюк был у меня. Сейчас добавил пару десятков записей и выполнил Ваш запрос. Все отработало очень быстро.
...
Рейтинг: 0 / 0
Подсчет записей и вывод макс. значения.
    #38663748
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirк сожалению (или к счастью), в mysql нет with ties, так что как-то так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select 
  t1.id_shopper  
from 
(select 
  id_shopper ,count(idgood) c
from sales group by 1
) t1 join
(
 select  id_shopper, count(id_goods) c
 from sales
 group by 1
 order by 2 desc limit 1
) t2 on t1.c=t2.c




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT id_shopper, total 

FROM (

    SELECT id_shopper,@m:=COUNT(idgood) AS 'total',IF(@k<@m,@k:=@m,@k)

    FROM sales join (SELECT @k:=0) k

    GROUP BY id_shopper

) t

WHERE

total = @k;


enjoy!
...
Рейтинг: 0 / 0
Подсчет записей и вывод макс. значения.
    #38663751
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если что, можно в фак добавить на тему использование переменных.
...
Рейтинг: 0 / 0
Подсчет записей и вывод макс. значения.
    #38663805
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453если что, можно в фак добавить на тему использование переменных.Напишите цельный пост с постановкой задачи и решением, а я его перенесу в тот топик.

И есть у меня ощущение, что так проще:
Код: sql
1.
SELECT id_shopper,@k:=GREATEST(@k,COUNT(idgood)) AS 'total'
...
Рейтинг: 0 / 0
Подсчет записей и вывод макс. значения.
    #38663850
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftalex564657498765453если что, можно в фак добавить на тему использование переменных.Напишите цельный пост с постановкой задачи и решением, а я его перенесу в тот топик.

И есть у меня ощущение, что так проще:
Код: sql
1.
SELECT id_shopper,@k:=GREATEST(@k,COUNT(idgood)) AS 'total'



тада, компактней. но через иф изящней :)
ЗЫ
под изяществом понимаю использовать как можно меньше языковых конструкций, функций, и как болле простых/общеизвестных/наиболее употребимых/с боллее широкими возможностями
...
Рейтинг: 0 / 0
Подсчет записей и вывод макс. значения.
    #38664075
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453,

Перенес, орфографические ошибки в первом приближении исправил. Если нужно исправить что-то еще - пишите в "сообщить модератору" к тому посту.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет записей и вывод макс. значения.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]