2016-02-23 2 views
2

У меня есть таблица, и я хочу консолидированный просмотр двух запросов в одном. Ниже приводится таблица:Объединить результаты двух запросов

id message wordCount brand 
----------------------------------- 
1 xx xx xx  3   Brand1 
2 x xx xx x 4   Brand1 
3 x x xxxx  3   Brand2 
4 x x xx     Brand2 
4 x x   NuLL  Brand1 

and so on.. 

Я хочу написать запрос, который отображает количество значений, не являющихся нулевыми, т.е.

Однако, я хочу третий столбец также будет отображаться, что только показывает NO , строк, которые есть для бренда. Это даст мне представление о том, на сколько строк мы не получили подсчитывать слово

select brand, count(*) TotalCnt 
from my_table 
group by brand; 

Как получить бренд, wrdCnt и TotalCnt в одном окне?

+0

Что бы желаемый результат выглядеть? – Strawberry

+0

Вы уверены, что хотите использовать COUNT (wordCount), чтобы получить wordCount для бренда? Это просто lineCount, а не wordCount. –

ответ

1

Используйте выражение case сделать условный подсчет wrdCnt:

select brand, 
     count(*) TotalCnt, 
     count(case when wordCount is not null and wordCount!='' then 1 end) as wrdCnt 
from my_table 
group by brand; 
+0

Не является ли ненужным ненужным? – sagi

+0

@sagi, не думайте так, не так, как написано здесь. (На самом деле я просто копировал и вставлял, чтобы показать процедуру.) – jarlh

+0

Я думаю, что при подсчете нулевого значения он просто не будет содержать числа. Подобно выражению case без else (будет помечен null когда случай ложный нет?) – sagi

-1

Чтобы получить wrdCnt для бренда, вам нужно использовать SUM(), а не COUNT().

Кроме того, для этого не требуется никакого фильтра, функция агрегата принимает только строки, отличные от NULL, и 0 не влияет на SUM().

Вот запрос:

SELECT 
    brand, 
    SUM(wordCount) wrdCnt, 
    COUNT(*) rowCnt 
FROM 
    my_table 
GROUP BY 
    brand; 
+0

почему downVote? могу я знать причину? –

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