Hungry Weevils
Game: Perform tasks and rest cool.6 people play!
Play game
(
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
Вопрос не очень понятен.
Думаю, что имелось в виду это:
(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
да именно это имею ввиду, спасибо, но как теперь сгруппировать по группам 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
(
Hungry Weevils
Game: Perform tasks and rest cool.6 people play!
Play game
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 |
Hungry Weevils
Game: Perform tasks and rest cool.6 people play!
Play game
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| null | 15 | Новый клиент 15------ | 200,04 |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| null | 17 | Новый 17клиент | 9,12 |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Как связанны таблицы orders и klient? Для каждой записи из klient существует одна запись в orders? Для каждой записи из klient существует не более одной записи в orders? Для каждой записи из klient может существовать произвольное число записей в orders?
Для каждой записи из klient может существовать произвольное число записей в orders но в orders есть поле id.klient и в klient есть поле id и они логически как бы связаны
Тогда какое поле 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`
Да, теперь разобралась ,всем огромное спасибо!!!!!!!!!!!!!
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`
Hungry Weevils
Game: Perform tasks and rest cool.6 people play!
Play game
Но теперь проблема в другом [size=18]лишний раз считает join mysql[/size]
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`;
Hungry Weevils
Game: Perform tasks and rest cool.6 people play!
Play game
дает результат
=============================================
|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
select
klient.id,
klient.name,
bill_n_group.rashod,
orders_group.za_RN
from
klient left join
(
select
Id_klient,
Hungry Weevils
Game: Perform tasks and rest cool.6 people play!
Play game
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
Комментарии
Оставить комментарий
Базы данных - MySql (Maria DB)
Термины: Базы данных - MySql (Maria DB)