MySQL: 获取多列整数值的计数和总和
MySQL: Getting count and sum of integer values in multiple columns
好的,我的要求很简单。我有一个像这样的table。
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
给出了行数,而不是数学加法中的实际总和。
我认为这符合您的要求:
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
,以避免删除重复项的开销(在这种情况下可以忽略不计)。
好的,我的要求很简单。我有一个像这样的table。
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
给出了行数,而不是数学加法中的实际总和。
我认为这符合您的要求:
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
,以避免删除重复项的开销(在这种情况下可以忽略不计)。