Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывести поле по условиям / 14 сообщений из 14, страница 1 из 1
05.05.2016, 16:19
    #39230072
vepuy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести поле по условиям
Доброго дня. Подскажите с простенькой задачкой...

Есть таблица:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
имя  | фрукт  | количество
------------------------
ваня | яблоко | 4
ваня | груша  | 8
петя | яблоко | 12
петя | груша  | 9
оля  | яблоко | 9
оля  | груша  | 2

Нужно вывести имя ребенка, у которого яблок больше, чем груш, но при этом всего фруктов меньше 20. Как такое сделать?
Спасибо.
...
Рейтинг: 0 / 0
05.05.2016, 17:20
    #39230199
Вывести поле по условиям
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select f1_.*, f2.*, SUM(IF(fruct="яблоко",num,0)) as `apple`,
   SUM(IF(fruct="груша",num,0)) as `pear`
from
(
  select f1.`name` from `f` f1
  group by f1.`name`
  having sum(f1.`num`)<20
) f1_  -- оставляем только детей с кол-вом фруктов меньше 20
left outer join `f` f2 using (`name`)
 group by f1_.`name`
 having `apple` > `pear`
-- having SUM(IF(fruct="яблоко",num,0)) > SUM(IF(fruct="груша",num,0))
;
...
Рейтинг: 0 / 0
05.05.2016, 19:26
    #39230303
vepuy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести поле по условиям
Ого, а проще оно никак не делается?
...
Рейтинг: 0 / 0
05.05.2016, 19:38
    #39230310
Вывести поле по условиям
Без подзапроса имхо никак, а остальная часть довольно простая - колонки в select я оставил для наглядности, их можно убрать и поменять строку having на закомментированную.

Впрочем, если подождёте, то может кто-то ещё подскажет варианты.
...
Рейтинг: 0 / 0
05.05.2016, 19:56
    #39230321
vepuy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести поле по условиям
Эта таблица была сформирована тоже запросом select, через count количество подсчитано было. Изначально там было "ваня / яблоко" 4 строки, "ваня / груша" 8 строк и т.д.
В итоге как-то массивно выходит. А на вид простая задачка, думал парой строк обойдется =(
...
Рейтинг: 0 / 0
05.05.2016, 21:06
    #39230353
vepuy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести поле по условиям
Громыхатель,

Еще вопрос.
авторколонки в select я оставил для наглядности, их можно убрать и поменять строку having на закомментированную.
А можно как-то описать это "SUM(IF(fruct="яблоко",num,0)) as `apple`" вне SELECT? Т.е. дать это конструкции имя apple, но при этом не выводить в итоговую таблицу? Например, если надо будет не одно условие `apple` > `pear`, а допустим еще 5 других условий. В общем что бы имя apple задать и использовать, но не выводить в таблицу в SELECT.
...
Рейтинг: 0 / 0
05.05.2016, 21:43
    #39230381
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести поле по условиям
Код: sql
1.
2.
3.
4.
5.
SELECT name
FROM table
GROUP BY name
HAVING SUM(CASE fruit WHEN 'apple' THEN amount END) - SUM(CASE fruit WHEN 'pear' THEN amount END) > 0
AND SUM(amount) < 20
...
Рейтинг: 0 / 0
05.05.2016, 23:26
    #39230422
Вывести поле по условиям
vepuyА можно как-то описать это "SUM(IF(fruct="яблоко",num,0)) as `apple`" вне SELECT?
я же изначально показал этот вариант - раскомментируйте строку
Код: sql
1.
having SUM(IF(fruct="яблоко",num,0)) > SUM(IF(fruct="груша",num,0))

и удалите строку having строкой выше.

Впрочем, у Акины уже получился хороший вариант для случая, когда других фруктов кроме яблок и груш в таблице нет.
...
Рейтинг: 0 / 0
06.05.2016, 03:58
    #39230457
Вывести поле по условиям
ГромыхательБез подзапроса имхо никакГромыхательВпрочем, у Акины уже получился хороший вариант для случая, когда других фруктов кроме яблок и груш в таблице нет."иногда лучше жевать, чем говорить"(с)

У Акины вариант мало того, что без подзапросов, так ещё и никак не завязан на наличие в таблице только яблок и груш. Его запрос условием SUM(amount) < 20 проверяет общее кол-во фруктов у человека, вне зависимости от их "расовой" принадлежности и конкретно для яблок и груш проверяет, что яблок не меньше груш (условие SUM(CASE fruit WHEN 'apple' THEN amount END) - SUM(CASE fruit WHEN 'pear' THEN amount END) > 0)
...
Рейтинг: 0 / 0
06.05.2016, 10:57
    #39230634
Вывести поле по условиям
Добрый Э - Эх"иногда лучше жевать, чем говорить"(с)
Да-да, ошибся, грызть-то зачем? Не все тут такие большие спецы как вы.
...
Рейтинг: 0 / 0
06.05.2016, 15:35
    #39230954
vepuy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести поле по условиям
Я имел ввиду немного другое. Это уже не к задаче, а просто для себя) Например три поля Ф.И.О. объединить в одно [as FIO], и дальше уже им оперировать, а не постоянно по новой объединять. Но при этом что бы оно не выводилось в итоговую таблицу, а было только внутри кода для некоторых операций.
...
Рейтинг: 0 / 0
06.05.2016, 16:16
    #39230989
Вывести поле по условиям
Ну можно, например, обернуть результат в ещё один SELECT:
Код: sql
1.
2.
3.
select a, b from
(select 1+1 as a, 2+2 as b, concat_ws(' ', 'Ф.', 'И.', 'О.') as FIO) t1
where FIO = "Ф. И. О.";
...
Рейтинг: 0 / 0
06.05.2016, 16:41
    #39231015
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести поле по условиям
vepuyОго, а проще оно никак не делается?

А что тут сложного ?
...
Рейтинг: 0 / 0
06.05.2016, 16:46
    #39231019
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести поле по условиям
vepuy, так проще ?

Код: sql
1.
2.
3.
4.
5.
6.
7.
-- Нужно вывести имя ребенка, у которого яблок больше, чем груш, но при этом всего фруктов меньше 20. 

select distinct имя
from table_x m
where (select sum(количество) from table_x f where f.имя = m.имя) < 20
   and (select sum(количество) from table_x a where a.имя = m.имя and a.фрукт = 'яблоко') >
         (select sum(количество) from table_x p where p.имя = m.имя and p.фрукт = 'груша')
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывести поле по условиям / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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