2016-07-21 8 views
1
select x, 
count(case when i='abc' then 1 else null end) as ele1, 
count(case when i='def' then 1 else null end) as ele2, 
sum(ele1+ele2) as sum1 from (INNER QUERY) 

Когда я использую сумму (ele1 + ele2), она бросает ошибку, которая не найдена ele1. Как получить sum1 в одном запросе без использования какого-либо другого внешнего запроса?Сумма из 2 выбранных столбцов в другом столбце в большом запросе SQL

+0

Важно на SO, вы можете отметить принятый ответ с помощью галочки слева от отправленного ответа, ниже голосования. см. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235, почему это важно. Также важно проголосовать за ответ. Голосовые ответы полезны. Есть еще ... Вы можете проверить, что делать, когда кто-то отвечает на ваш вопрос - http://stackoverflow.com/help/someone-answers. –

ответ

2

Вы не можете использовать псевдоним в качестве имени столбца в выберите

select x, 
count(case when i='abc' then 1 else null end) as ele1, 
count(case when i='def' then 1 else null end) as ele2, 
sum( (case when i='abc' then 1 else null end ) + 
    (case when i='def' then 1 else null end)) as sum1 
from (INNER QUERY) 
+0

Я, хотя и тот же, но нет другого метода, потому что в этом случае мы снова должны применить условие, которое увеличит время запроса – hmims

+0

, оно также может быть выполнено как счетчик (случай, когда i = 'abc' || i = ' def 'then 1 else null end) как sum1 ... но есть ли другой способ сделать это? – hmims

+0

Я отвечаю за решение ошибки бросания, и для этого ответ правильный. Для лучшего запроса существует несколько разных решений, но это кажется еще одним вопросом ..... с точки зрения времени выполнения или решения, которое вы предоставляете, в растворе или в двух случаях slution очень silmilar .. в любом случае – scaisEdge

1

Вы не можете использовать псевдоним в качестве имени столбца, но если ваше беспокойство в подробности сообщений - в вашем конкретном случае, вы можете написать что-то, как показано ниже, который легко читается и тощий достаточно (для BigQuery Наследства SQL)

SELECT 
    SUM(i ='abc') AS ele1, 
    SUM(i = 'def') AS ele2, 
    SUM(i IN ('abc', 'def')) AS sum1 
FROM (INNER QUERY) 

 Смежные вопросы

  • Нет связанных вопросов^_^