2015-10-30 4 views
1

Хорошо, поэтому мое требование довольно простое. У меня такой стол.MySQL: Получение количества и суммы целочисленных значений в нескольких столбцах

images  |  videos  |  reviews 
-------------------------------------------------- 
0   |  2   |  1 
4   |  5   |  0 
11   |  1   |  4 
0   |  1   |  7 

Мне нужно написать запрос, который подсчитывает строки в каждом столбце, не равно 0, а также, что дает фактическую сумму чисел в столбцах. Таким образом, результат будет выглядеть примерно так.

Columns  |  Counts  |  Sum 
---------------------------------------------------- 
images   |  2   |  15 
videos   |  4   |  9 
reviews  |  3   |  13 

Возможно ли это с помощью SQL? Я не хочу делать эту сумму на уровне приложения. До сих пор я написал этот запрос, и он отлично работает, просто без суммы.

SELECT 'images', SUM(images != 0) 
FROM dpsreport where publisherId = 91 
UNION 
SELECT 'videos', SUM(videos != 0) 
FROM dpsreport where publisherId = 91 
UNION 
SELECT 'reviews', SUM(reviews != 0) 
FROM dpsreport where publisherId = 91; 

Обратите внимание, что SUM в запросе дает мне количество строк, а не фактическую сумму, как и в математическом придачу.

ответ

1

Я думаю, что это делает то, что вы хотите:

SELECT 'images' as `columns`, SUM(images <> 0) as counts, SUM(images) as `sum` 
FROM dpsreport where publisherId = 91 
UNION ALL 
SELECT 'videos', SUM(videos <> 0), SUM(videos) 
FROM dpsreport where publisherId = 91 
UNION ALL 
SELECT 'reviews', SUM(reviews <> 0), SUM(reviews) 
FROM dpsreport where publisherId = 91; 

Примечания:

  • Стандарт SQL для не равно является <>, а не != (хотя многие базы данных поддерживают оба).
  • Используйте UNION ALL, а не UNION, чтобы избежать накладных расходов на удаление дубликатов (что в данном случае незначительно).

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

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