2016-08-28 5 views
5

मैं एक और उपनाम बनाने के लिए 2 उपनामों को घटाने की कोशिश कर रहा हूं लेकिन मुझे "अज्ञात कॉलम" त्रुटि मिल रही है।2 अन्य उपनामों के गणित परिणाम का उपयोग करके उपनाम बनाना

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 

असल में, मैं expense से revenue को घटा कर एक profit उर्फ ​​बनाना चाहते हैं:

यहाँ मेरी एसक्यूएल है। कारण यह है कि मैं डेटाटेबल्स का उपयोग कर रहा हूं और कॉलम को क्रमबद्ध करना चाहता हूं। मुझे पहले से ही पता है कि मैं PHP के साथ आसानी से ऐसा कर सकता हूं।

मैं इसे कैसे पूरा कर सकता हूं?

संपादित करें - मैंने नीचे दिए गए उत्तरों का प्रयास किया है और पीएचपीएसटॉर्म से "प्रत्येक व्युत्पन्न तालिका में उपनाम होना चाहिए" और क्वेरी चलाने का प्रयास करते समय एक वाक्यविन्यास त्रुटि प्राप्त हो रही है।

यहाँ नई क्वेरी:

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 

उत्तर

1

बस एक और चुनने के बाद, उपनाम के साथ लपेट गणितीय गणना के उपयोगों के लिए उपलब्ध हो जाएगा:

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

अन्य उत्तर के समान, त्रुटि प्राप्त करना - "प्रत्येक व्युत्पन्न तालिका में उपनाम होना चाहिए" – kjdion84

+0

@ kjdion84 अपनी पूर्ण क्वेरी पोस्ट करें, मैं आपको बताऊंगा कि आपने क्या किया है। – sagi

+0

@ kjdion84 आप 'ओ' का चयन कर रहे हैं। 'टी। कॉलम>', (आईडी और नाम) की बजाय बाहरी क्वेरी में ', इसे ठीक करें और पुनः प्रयास करें – 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 

नोट:

आप केवल GROUP BY, ORDER BY, or HAVING खंड में स्तंभ कल्पित नामों का प्रयोग कर सकते हैं।

मानक SQL आप एक कहां खंड में एक कॉलम उर्फ ​​का उल्लेख की अनुमति नहीं है। यह प्रतिबंध लगाया गया है क्योंकि जब WHERE कोड निष्पादित किया गया है, तो कॉलम मान अभी तक निर्धारित नहीं हो सकता है।

Reference

+0

हो रही त्रुटि - "प्रत्येक व्युत्पन्न तालिका उर्फ ​​होना चाहिए" – kjdion84

+0

मैं मैंने उपनाम का उपयोग किया है। क्या आपने पूरी क्वेरी को आजमाया है जिसे मैंने पोस्ट किया है? @ kjdion84 – 1000111

+0

आपके द्वारा प्रदत्त प्रतिबिंब और उद्धरण 'WHERE' खंड के बारे में बात कर रहा है, ओपी ने' SELECT' कथन के अंदर उपनामों का उपयोग करने के बारे में पूछा। – sagi

संबंधित मुद्दे