Mysql пропустил подсчет строки, ошибка?

Вот мой запрос MySQL для подсчета повторяющегося элемента,

SELECT
  count(item),
  item,
  name,
  area
FROM jmr
WHERE starttime LIKE '2024-05-03%' and area='DC'
group by item, name;

Результат:

количество (пункт) элемент имя область 1 24050C24S DC-STD-03 ОКРУГ КОЛУМБИЯ 2 24050C24S DC-STD-04 ОКРУГ КОЛУМБИЯ 1 24050506С DC-STD-01 ОКРУГ КОЛУМБИЯ 1 2405065ES DC-STD-01 ОКРУГ КОЛУМБИЯ 1 2406025CS DC-STD-01 ОКРУГ КОЛУМБИЯ 2 24050E98S DC-STD-03 ОКРУГ КОЛУМБИЯ 1 24050E9BS DC-STD-03 ОКРУГ КОЛУМБИЯ 1 24100258С DC-STD-04 ОКРУГ КОЛУМБИЯ 1 24040А88С DC-STD-04 ОКРУГ КОЛУМБИЯ 1 24050506С DC-STD-02 ОКРУГ КОЛУМБИЯ

Основываясь на приведенном выше запросе и результате, по праву элемент 24050506S должен иметь 2 счетчика, но mysql пропускает 1 из них.

Это вызвано моим запросом или что-то не так с MySQL?

Вы группируете по item и name (и неявно по area). Поскольку значения name различаются, вы получаете отдельные строки.

Phil 06.05.2024 07:56

Неполная группировка. Либо добавьте area к выражению группировки, либо используйте 'DC' AS area (в соответствии с вашим ГДЕ) в выходном списке. И включите ONLY_FULL_GROUP_BY.

Akina 06.05.2024 08:07

Я бы предложил убрать area из результатов. В любом случае это избыточно из-за статического предложения WHERE.

Phil 06.05.2024 08:09

Товар 24050C24S тоже с другим названием, но он учитывается. Если я не группирую элемент и имя, выдается ошибка 1055, exp#3.

chteow 06.05.2024 08:10

«Товар 24050C24S также с другим именем, но он учитывается»... это означает, что есть две строки с DC-STD-04 и одна с DC-STD-03

Phil 06.05.2024 08:12

Это одна из особенностей MySQL. В других СУБД вы всегда получаете сообщение об ошибке, а не потенциально бесполезные результаты. Например, в PostgreSQL: «столбец «jmr.area» должен присутствовать в предложении GROUP BY или использоваться в агрегатной функции». См. Обработка MySQL GROUP BY.

Álvaro González 06.05.2024 08:22

Покажите исходные данные, на которых вы выполняете этот запрос. Но если вы думаете, что две строки результатов с 24050506S следует сгруппировать вместе, вы ошибаетесь. Потому что вы группируете item и name, и эти две строки имеют разное значение name.

derpirscher 06.05.2024 08:34
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
7
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет ввода табличной информации...

По запросу я попытался это исправить. Вы хотите подсчитать предметы, сгруппировав их по предметам и названиям, где время начала — «03.05.2024», а регион — «DC».

Итак, запрос:

SELECT
  count(item) over(partition by item) as count,
  item,
  name,
  area
FROM jmr
WHERE starttime LIKE '2024-05-03%' and area='DC'
group by item, name
order by item, name;

Вывод: db<>fiddle

Что этот ответ должен нам сказать?

derpirscher 06.05.2024 08:35

@ArtBindu Не говорите людям, что они должны голосовать за ответы, это их собственное решение.

Jonas Metzler 06.05.2024 08:59

Я не понимаю, почему люди голосуют отрицательно.

Art Bindu 07.05.2024 06:17

щелкните стрелку вверх, она никогда не показывает +, только -1 или -2, нет 1, 2, без понятия

chteow 07.05.2024 08:48

Другие вопросы по теме