Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
1

Получение уникальных значений поля (GROUP BY) и min/max значений других полей

15.10.2015, 00:13. Показов 3990. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.

Есть таблица из 4 полей:
SQL
1
id | article | price | enabled
id - уникальный AI, остальные - обычные неуникальные поля. enabled может быть 0 или 1.

Допустим, есть несколько записей:
SQL
1
2
3
4
1 | art1 | 500 | 1
2 | art1 | 700 | 1
3 | art2 | 500 | 0
4 | art2 | 700 | 1
Необходимо получить:
1. Все уникальные значения поля article.
2. Для каждого поля article получить минимальный price максимального enabled. Т.е. результат должен быть такой:

article price enabled
art1 500 1
art2 700 1

Т.е.:
1. Берём артикул, ищем среди его записей максимальный enabled.
2. Среди записей с таким enabled ищем минимальный price.

Сижу около 3 часов, пробую разные запросы, но никак не могу составить ничего адекватного. Пока что написал запрос для одного заранее известного артикула:
SQL
1
2
3
SELECT *, (SELECT `price` FROM `test` WHERE `article` = 'art1' ORDER BY `enabled` DESC, `price` LIMIT 1) AS 'max_price'
    FROM `test` WHERE `article` = 'art1'
        GROUP BY `article`
Но по задаче нужно получить не один, а все артикулы, и подставлять в оба WHERE все уникальные артикулы, я так понимаю, нет возможности.

Подскажите, в какую сторону копать. Благодарю.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2015, 00:13
Ответы с готовыми решениями:

Получение уникальных пар значений
Присутствуют в моей базе поля section и floor. Выглядит примерно 1 1 1 1 1 1 1 1 1 2 1 2 2...

Получение всех уникальных значений из MySQL
Есть MySQL БД в которой имеется целая куча записей с одинаковыми значениями в определенном поле. (Я...

Mixing of GROUP columns (MIN(),MAX(),COUNT(),.) with no GROUP columns is illegal if there is no GROUP BY clause
Такая ошибка: КОД: $result=mysql_query("SELECT description, min(schedule.date) as...

Дилемма с выводом уникальных значений из одной колонки и всех остальных из других
Подскажите кто знает? Таблица client поля id, name, date, manager Есть дублирующиеся значения...

4
66 / 64 / 24
Регистрация: 14.10.2014
Сообщений: 339
15.10.2015, 00:27 2
А если так
SQL
1
SELECT article, MIN(price) AS maxprice FROM TABLE_NAME WHERE enabled = 1 GROUP BY article ORDER BY article
1
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
15.10.2015, 01:17  [ТС] 3
ApXyC, благодарю, но такой вариант не подходит - он выбирает только при enabled = 1, а нужно выбирать по максимальному значению, т.е. если у всех записей enabled = 0, то цену брать минимальную именно для этого значения. Ну т.е. нечто вроде этого:
SQL
1
SELECT article, MIN(price) AS minprice, MAX(`enabled`) AS 'maxenabled' FROM `test` WHERE enabled = MAX(enabled) GROUP BY article
Только здесь ошибка - нельзя MAX() использовать в WHERE.
0
66 / 64 / 24
Регистрация: 14.10.2014
Сообщений: 339
15.10.2015, 02:11 4
Лучший ответ Сообщение было отмечено Jodah как решение

Решение

ладушки, а так?
SQL
1
2
3
4
5
6
7
8
SELECT main.article, MIN(main.price)
FROM TABLE_NAME main
JOIN (
    SELECT article, MAX(enabled) AS maxenabled
    FROM TABLE_NAME
    GROUP BY article
    ) nested ON main.article = nested.article AND main.enabled = nested.enabled
GROUP BY main.article
1
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
15.10.2015, 11:01  [ТС] 5
ApXyC, офигеть, оно работает! Огромная благодарность.

Чуть дописал, вот итоговый запрос:
SQL
1
2
3
4
5
6
7
8
SELECT main.article, MIN(main.price) AS 'price', MAX(main.enabled) AS 'enabled'
FROM test main
JOIN (
    SELECT article, MAX(enabled) AS maxenabled
    FROM test
    GROUP BY article
    ) nested ON main.article = nested.article AND main.enabled = nested.maxenabled
GROUP BY main.article
0
15.10.2015, 11:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2015, 11:01
Помогаю со студенческими работами здесь

Получение уникальных значений из столбца средствами VBA
Всем привет. Нужен совет знающих людей по задаче - Получение уникальных значений из столбца...

Получение массива уникальных значений средствами Linq
Есть обобщенная коллекция типа структуры в которой определено поле типа int. Структура выглядит...

Поиск min и max значений
В массиве хранится информация о стоимости 20 видов конфет. Определить на сколько стоимость самых...

Подсчёт уникальных значений поля таблицы
Здравствуйте, есть задачка по foxpro: вычисление количества (и вывод) не повторяющихся значений...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru