avatar

select с разными условиями

Рейтинг 4.5 из 5. Голосов: 245
Iriska 8 лет назад
8
,

0


Ответы (8)

Iriska
avatar
За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений Девушкам форума
60 Mar 10
8 лет назад
( SELECT SUM(`itogo`) AS rr, `Id_klient`, klient.name FROM `bill_n`, klient WHERE (klient.id = bill_n.Id_klient) AND (bill_n.`vid` = 0) AND (bill_n.`status` = 1) ) UNION ( SELECT SUM(`itogo`) AS rr1, `Id_klient`, klient.name FROM `bill_n`, klient WHERE (klient.id = bill_n.Id_klient) AND (bill_n.`vid` = 1) AND (bill_n.`status` = 1) ) как сделать чтобы был четвертый столбец rr1
отправить
+ 0

Den
avatar
Модератор За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений За 100 сообщений за 500 сообщений За 700 сообщений
1089 Mar 10
8 лет назад
Вопрос не очень понятен. Думаю, что имелось в виду это: (select sum(`itogo`) AS rr, `Id_klient`, klient.name, null as rr1 from … ) union (select null as rr, `Id_klient`, klient.name, SUM(`itogo`) AS rr1 from …) То бишь в обе части добавить этот столбец, но в зависимости от ситуации подставлять туда сразу null
отправить
+ 0

Iriska
avatar
За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений Девушкам форума
60 Mar 10
8 лет назад
да именно это имею ввиду, спасибо, но как теперь сгруппировать по группам GROUP BY `Id_klient`? делаю ( SELECT SUM(`itogo`) AS rr, `Id_klient`, klient.name, null as rr1 FROM `bill_n`, klient WHERE (klient.id = bill_n.Id_klient) AND (bill_n.`vid` = 1) AND (bill_n.`status` = 1) GROUP BY `Id_klient` ) UNION ALL ( SELECT null as rr, `Id_klient`, klient.name, SUM(`itogo`) AS rr1 FROM `bill_n`, klient WHERE (klient.id = bill_n.Id_klient) AND (bill_n.`vid` = 0) AND (bill_n.`status` = 1) GROUP BY `Id_klient` ) а результат ============================================================================================================================================================================================================= | rr | Id_klient | name | rr1 | ============================================================================================================================================================================================================= | 0,07 | 15 | Новый клиент 15------ | null | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | null | 15 | Новый клиент 15------ | 200,04 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | null | 17 | Новый 17клиент | 9,12 | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
отправить
+ 0

Den
avatar
Модератор За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений За 100 сообщений за 500 сообщений За 700 сообщений
1089 Mar 10
8 лет назад
Как связанны таблицы orders и klient? Для каждой записи из klient существует одна запись в orders? Для каждой записи из klient существует не более одной записи в orders? Для каждой записи из klient может существовать произвольное число записей в orders?
отправить
+ 0

Iriska
avatar
За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений Девушкам форума
60 Mar 10
8 лет назад
Для каждой записи из klient может существовать произвольное число записей в orders но в orders есть поле id.klient и в klient есть поле id и они логически как бы связаны
отправить
+ 0

Den
avatar
Модератор За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений За 100 сообщений за 500 сообщений За 700 сообщений
1089 Mar 10
8 лет назад
Тогда какое поле orders.summa Вы хотите выбрать если, для Id_klient может существовать несколько строк с потенциально различным значением поля orders.summa? (Добавление) select sum(if(bill_n.`vid` = 1,`itogo`,0)) as rr, sum(if(bill_n.`vid` = 0,`itogo`,0)) as rr1, `Id_klient`, klient.name from `bill_n` join klient on klient.id = bill_n.Id_klient where bill_n.`status` = 1 group by `Id_klient`
отправить
+ 0

Iriska
avatar
За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений Девушкам форума
60 Mar 10
8 лет назад
Да, теперь разобралась ,всем огромное спасибо!!!!!!!!!!!!! SELECT bill_n.`Id_klient`, klient.name, SUM(IF(bill_n.`vid` = 0, `itogo`, 0)) AS rashod, SUM(IF(bill_n.`vid` = 1, `itogo`, 0)) AS prihod, SUM(IF(orders.Schet = 0, orders.summa, 0)) AS za_RN, SUM(IF(orders.Schet = 1, orders.summa, 0)) AS za_PR FROM `bill_n` JOIN klient ON klient.id = bill_n.Id_klient JOIN orders ON orders.Id_klient = klient.id WHERE bill_n.`status` = 1 GROUP BY `Id_klient` (Добавление) Но теперь проблема в другом лишний раз считает join mysql SELECT bill_n.`Id_klient`, klient.name, ROUND(SUM(IF(bill_n.`vid` = 0, bill_n.`itogo`, 0)), 2) AS rashod, ROUND(SUM(IF(orders.Schet = 0, orders.summa, 0)), 2) AS za_RN FROM `bill_n` JOIN klient ON klient.id = bill_n.Id_klient JOIN orders ON orders.Id_klient = klient.id WHERE bill_n.`status` = 1 GROUP BY bill_n.`Id_klient`; дает результат ============================================= |Id_klient | name | rashod | za_RN | ============================================= | 15 | Новый | 200,04 | 0,0 | | | клиент | | | | | 15------ | | | --------------------------------------------- | 17 | Новый | 72,96 | 20,12 | | | 17клиент | | | --------------------------------------------- а на самом деле ============================================= |Id_klient | name | rashod | za_RN | ============================================= | 15 | Новый | 200,04 | 0,0 | | | клиент | | | | | 15------ | | | --------------------------------------------- | 17 | Новый | 9,12 | 20,12 | | | 17клиент | | | --------------------------------------------- видимо из-за вложенности лишний раз пересчитывает, как сделать правильно?????? и возможно ли это? действительно в orders есть 8 записей с orders.Id_klient = klient.id=17
отправить
+ 0

Den
avatar
Модератор За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений За 100 сообщений за 500 сообщений За 700 сообщений
1089 Mar 10
8 лет назад
select klient.id, klient.name, bill_n_group.rashod, orders_group.za_RN from klient left join ( select Id_klient, ROUND(SUM(IF(`vid` = 0, `itogo`, 0)), 2) AS rashod from bill_n group by Id_klient ) as bill_n_group on klient.id=bill_n_group.Id_klient left join ( select Id_klient, ROUND(SUM(IF(Schet = 0, summa, 0)), 2) AS za_RN from orders group by Id_klient ) as orders_group on klient.id=orders_group.Id_klient
отправить
+ 0


Чтобы оставить комментарий войдите или зарегистрируйтесь