Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Задачка на group
Shuriken  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 264
Пользователь №: 17632
На форуме: 8 лет, 2 месяца, 20 дней
Карма: 7




Доброго времени суток!

Есть две коробки. В эти коробки периодически кладётся разное количество шариков. Это пишется в таблицу box_ball с полями box_id и cnt_ball. Необходимо посчитать количество шариков в коробках. Это просто:
SELECT b.name, SUM(cnt_ball)
FROM box_ball bb
INNER JOIN box b ON b.id = bb.box_id
WHERE 1
GROUP BY b.name
ORDER BY b.name


Коробку 1 поставили в коробку 2. Количество шариков в первой коробке не изменилось, а вот во второй стало количество в первой коробке + количество во второй.

Как в данном случае вывести количество шариков для второй коробки?

Коробок может быть бесконечно много, но заранее известно, что коробка 1 находится в коробке 2.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2792
Пользователь №: 24406
На форуме: 6 лет, 9 месяцев, 3 дня
Карма: 180




Цитата (Shuriken @ 17.04.2017 - 07:20)
Коробок может быть бесконечно много, но заранее известно, что коробка 1 находится в коробке 2.

То есть, одна коробка внутри коробки, и бесконечно много коробок (которые не содержат в себе коробки)?
Вложенность коробок только на логическом уровне или есть физическое поле принадлежности коробки к коробке?


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Shuriken  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 264
Пользователь №: 17632
На форуме: 8 лет, 2 месяца, 20 дней
Карма: 7




Цитата (T1grOK @ 17.04.2017 - 10:16)
Цитата (Shuriken @ 17.04.2017 - 07:20)
Коробок может быть бесконечно много, но заранее известно, что коробка 1 находится в коробке 2.

То есть, одна коробка внутри коробки, и бесконечно много коробок (которые не содержат в себе коробки)?

Да. Если необходимо, то можно добавлять поля в таблицу.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2792
Пользователь №: 24406
На форуме: 6 лет, 9 месяцев, 3 дня
Карма: 180




Навскидку, можно решить добавив 2 JOIN.


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Shuriken  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 264
Пользователь №: 17632
На форуме: 8 лет, 2 месяца, 20 дней
Карма: 7




Цитата (T1grOK @ 17.04.2017 - 10:32)
Навскидку, можно решить добавив 2 JOIN.

Можно пример?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2792
Пользователь №: 24406
На форуме: 6 лет, 9 месяцев, 3 дня
Карма: 180




Цитата (T1grOK @ 17.04.2017 - 08:32)
Навскидку, можно решить добавив 2 JOIN.

Не учел, что в box_ball, несколько записей к box.
Как то так можно решить:

SELECT box.name, SUM(subq.sum)
FROM box
INNER JOIN (
SELECT b.id, b.name, SUM(bb.cnt_ball) as sum
FROM box_ball bb
INNER JOIN box b ON b.id = bb.box_id
GROUP BY b.id
) subq ON subq.id = box.id OR (subq.name = 1 AND box.name = 2)
GROUP BY box.id


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Shuriken  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 264
Пользователь №: 17632
На форуме: 8 лет, 2 месяца, 20 дней
Карма: 7




Спасибо, работает, но можно его переписать немного проще


SELECT b1.name, SUM(bb.cnt_ball) as sum
FROM box_ball bb
INNER JOIN box b ON b.id = bb.box_id
INNER JOIN box b1 ON b.id = b1.id OR (b.id = 1 AND b1.id = 2)
GROUP BY b1.id
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса