2016-08-28 25 views
5

Başka bir ad oluşturmak için 2 diğer adı çıkarmaya çalışıyorum ancak "bilinmeyen sütun" hatası alıyorum.Diğer 2 takma adın matematik sonucunu kullanarak bir takma ad oluşturma

select o.id, o.name, 
    (select sum(l.source_expense) 
     from `assignments` as a 
     left join `leads` as l on (l.id = a.lead_id) 
     where a.{$this->sql_column}=o.id 
     and l.date_created between {$this->date_from} and {$this->date_to} 
     and find_in_set(l.vertical_id, '".implode(',', $this->app_user->verticals)."') 
    ) as `expense`, 
    (select sum(a.buyer_revenue) 
     from `assignments` as a 
     left join `leads` as l on (l.id = a.lead_id) 
     where a.refunded=0 
     and a.{$this->sql_column}=o.id 
     and l.date_created between {$this->date_from} and {$this->date_to} 
     and find_in_set(l.vertical_id, '".implode(',', $this->app_user->verticals)."') 
    ) as `revenue`, 
    `revenue` - `expense` as `profit` 
    from {$this->sql_table} as o 

Temelde, expense dan revenue çıkarılarak bir profit diğer adı oluşturmak istiyorum:

İşte benim SQL olduğunu. Nedeni veri ambarları kullanıyorum ve sütunun sıralanabilir olmasını istiyorum. Bunu zaten PHP ile kolayca yapabileceğimi biliyorum.

Bunu nasıl yapabilirim?

Düzenleme - Aşağıdaki yanıtları denedim ve "Her bir tablodaki takma ad olmalıdır" hatası PHPStorm'dan ve sorguyu çalıştırmaya çalışırken bir sözdizimi hatası alıyorum.

İşte yeni sorgu: Bir alt sorgu içine Sorgunuzu koymak gerekir

select t.id, t.name, t.expense, t.revenue, t.revenue - t.expense as profit 
from(select o.id, o.name, 
    (select sum(l.source_expense) 
     from `assignments` as a 
     left join `leads` as l on (l.id = a.lead_id) 
     where a.{$this->sql_column}=o.id 
     and l.date_created between {$this->date_from} and {$this->date_to} 
     and find_in_set(l.vertical_id, '".implode(',', $this->app_user->verticals)."') 
    ) as `expense`, 
    (select sum(a.buyer_revenue) 
     from `assignments` as a 
     left join `leads` as l on (l.id = a.lead_id) 
     where a.refunded=0 
     and a.{$this->sql_column}=o.id 
     and l.date_created between {$this->date_from} and {$this->date_to} 
     and find_in_set(l.vertical_id, '".implode(',', $this->app_user->verticals)."') 
    ) as `revenue` 
    from {$this->sql_table} as o 
) as t 

cevap

1

Sadece matematiksel hesaplama kullanımlar için satışa sunulacak başka seçme, daha sonra diğer adları ile sarın:

SELECT t.id,o.name,t.expense,t.revenue, 
     t.revenue -t.expense as `profit` 
FROM (Your Query Here) t 
+0

Diğer cevaplarla aynı şekilde, hata alıyorum - "her bir tablo diğer ad olmalıdır" – kjdion84

+0

@ kjdion84 Tam sorgunuzu gönderin, size ne yaptığınızı söyleyeyim. – sagi

+0

@ kjdion84 'O seçimini yapıyorsunuz '' T.Column> 'yerine dış sorguda (id ve name), bunu düzeltin ve tekrar deneyin – sagi

2

.

SELECT 
t.*, 
t.`revenue` - t.`expense` as `profit` 
FROM 
(
select o.id, o.name, 
    (select sum(l.source_expense) 
     from `assignments` as a 
     left join `leads` as l on (l.id = a.lead_id) 
     where a.{$this->sql_column}=o.id 
     and l.date_created between {$this->date_from} and {$this->date_to} 
     and find_in_set(l.vertical_id, '".implode(',', $this->app_user->verticals)."') 
    ) as `expense`, 
    (select sum(a.buyer_revenue) 
     from `assignments` as a 
     left join `leads` as l on (l.id = a.lead_id) 
     where a.refunded=0 
     and a.{$this->sql_column}=o.id 
     and l.date_created between {$this->date_from} and {$this->date_to} 
     and find_in_set(l.vertical_id, '".implode(',', $this->app_user->verticals)."') 
    ) as `revenue` 
    from {$this->sql_table} as o 
) AS t 

Not:

Yalnızca GROUP BY, ORDER BY, or HAVING maddelerinde sütun takma adları kullanabilirsiniz.

Standart SQL bir NEREDE yan tümcesinde bir sütun diğer adı başvurmak izin vermez. WHERE kod yürütülür olduğunda, sütun değeri henüz belirlenemez, çünkü bu kısıtlama uygulanır.

Reference

+0

alma hatası - Ben – kjdion84

+0

"Her türetilmiş tablo diğer adı olmalı" ve diğer takma adları kullanıldı. Gönderdiğim tüm sorguyu denediniz mi? @ kjdion84 – 1000111

+0

Sağladığınız refference ve alıntı "WHERE" maddesinden bahsediyor, OP "SELECT" ifadesinin içindeki takma adların kullanımı hakkında sordu. – sagi