![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
bars80080 |
|
||||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 5 Всего: 315 |
есть таблица:
есть два запроса:
этот возвращает две строки данных
этот не возвращает ничего, empty set возврат данных получается при группировке по полям id, sate, user, account, upd или common_order, но ничего не возвращает при группировке по полям type и avia_type изменить тип поля `avia_type` int(11) unsigned default '0' ситуации не изменило в чём может быть проблема? Добавлено через 14 минут и 55 секунд одно добавление: поле `avia_type` было добавлено после создания таблицы (ALTER TABLE ... ADD ...), но поле type уже было создано вместе с таблицей (CREATE...) |
||||||
|
|||||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
В том что из по одному случайно отобранных значений account для каждой группы с одинаковым avia_type не нашлось ни одного значения 700. Блин мудрено как то получается. Смотри. У тебя есть сто записей. В этих ста записях десять уникальных avia_type. Группируясь по avia_type ты получаешь одно, любое(читай случайное) значение account из каждой группы. По кторому ты потом фильтрушеься. Из за этой неопределенности результата, нормлаьные движки запрещают в select list и having использовать поля, к которым не применен аггрегат, либо которые не перечислены в груп бай. Мася выпендрилась. Это сообщение отредактировал(а) Zloxa - 25.4.2013, 11:45 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 5 Всего: 315 |
капец, ты вселяешь в меня неуверенность
вот так работает:
|
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Везение )) Данные лягут чуть по другому - перестанет. Добавлено через 51 секунду Какая твоя цель, bars80080? Что ты хочешь получить этим запросом? -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 5 Всего: 315 |
да нет, я проверил, вывел все суммы корректно (я вручную их в пхп посчитал), всё сходится в копейку выбрать записи с `account`=700 и получить из них сумму, приходящуюся на каждый `avia_type`. где `avia_type` - тип операции, а мне нужно знать сумму, приходящуюся на этот тип операции |
|||
|
||||
Zloxa |
|
||||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Да, я ступил. В том случае ты используешь группировку по полю `account`, а потому все записи в каждой группе имеют одинаковое значение, при любом физическом расположении данных.
Ну так where же а не having
where выполняется до группировки. группировка применяется к тому, что отобрано where having применяется к результату группировки. Т.е. в твоем примере группировка однозначно будет применена ко всем данным таблицы. В случае с where она будет применена только к отобранному where набору. Более того, если `account` индексирован, сканирование всей таблицы может не понадобиться, ведь может быть использован индекс для отбора по предикату из where. По предикату из having доступ по индексу не возможен в принципе. Ну если только уж супер умный оптимизатор попадется. Это сообщение отредактировал(а) Zloxa - 25.4.2013, 15:25 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||||
|
|||||||
Akina |
|
||||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Сделай всё-таки грамотно:
Всё равно в остальных полях (кроме тех, где для всей группы одно и то же значение) будет слабосогласованная ахинея. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||||
|
|||||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Akina, да, спасибо. Хотел, да забыл - копипаста подвела
![]() -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 5 Всего: 315 |
хоть убей, всю жизнь был уверен, что WHERE и GROUP BY вместе использовать нельзя. причём был уверен, что научили на этом форуме и что раньше всегда были ошибки
|
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
в where нельзя указать критерием то, что считается в результате группировки.
т.е. where sum(somefield)=100500 - нельзя Причина, как я уже пояснял - where работает до группировки ) Это сообщение отредактировал(а) Zloxa - 25.4.2013, 17:21 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |