MySQL:获取多列

时间:2015-10-30 11:48:37

标签: mysql sql count addition

好的,所以我的要求很简单。我有一张这样的桌子。

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 个答案:

答案 0 :(得分: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,以避免删除重复项的开销(在这种情况下可以忽略不计)。