【问题标题】:MySQL: Getting count and sum of integer values in multiple columnsMySQL:获取多列中整数值的计数和总和
【发布时间】:2015-10-30 11:48:37
【问题描述】:

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

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 直接实现吗?我不想在应用程序级别上求和。到目前为止,我已经编写了这个查询,它工作正常,只是没有 sum 部分。

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 给我的是行数,而不是实际的总和,就像数学加法一样。

【问题讨论】:

    标签: mysql sql count addition


    【解决方案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 标准是 &lt;&gt; 而不是 !=(尽管许多数据库都支持这两者)。
    • 使用UNION ALL 而不是UNION,以避免删除重复项的开销(在这种情况下可以忽略不计)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 2013-10-16
      • 1970-01-01
      相关资源
      最近更新 更多