添加6个项目以提供总计,但不添加它们的值

时间:2013-04-23 11:59:47

标签: mysql math count sum

一点新手,可能是一个非常基本的问题,但是让我发疯了。

我有一个mysql表。我有一个有记录ID的记录,还有六个包含照片名称的字段。

所以, Record_id,photo1,photo2,photo3,photo4,photo5,photo6

我希望得到最终结果,我有一个名为“TOTAL”的列,它显示了有多少记录在其中的照片数量为TOTAL。因此,记录1可能总共有5张照片,记录2可能有3张照片,而记录3可能总共有该记录的NO记录等?

现在上传到现场的一些照片名称可能包含数字,即photo244.jpg或pic3993.jpg等 - 所以我不希望这些数字加在一起,我只是在寻找是否该字段在其中有一个名称等,这将被计为1以添加到总数。因此,页面上的最终结果是记录13(例如)总共有4张照片等 - 抱歉,如果不是一个好的解释!

它可能与SUM或COUNT有关,但花了很多时间试图获得组合或正确的键/语法!可以通过给出一个mysql select语句的例子来帮助讨好 - 不胜感激!

3 个答案:

答案 0 :(得分:2)

我认为如果没有照片,则字段photoX为空或为空 因此,如果字段为空或空,则使用CASE作为输出0,否则使用1。

SELECT Record_id
     , 
          CASE WHEN (photo1 IS NULL OR photo1 = '') THEN 0 ELSE 1 END
        + CASE WHEN (photo2 IS NULL OR photo2 = '') THEN 0 ELSE 1 END
        + CASE WHEN (photo3 IS NULL OR photo3 = '') THEN 0 ELSE 1 END
        + CASE WHEN (photo4 IS NULL OR photo4 = '') THEN 0 ELSE 1 END
        + CASE WHEN (photo5 IS NULL OR photo5 = '') THEN 0 ELSE 1 END
        + CASE WHEN (photo6 IS NULL OR photo6 = '') THEN 0 ELSE 1 END
      AS Total
FROM myTable

答案 1 :(得分:0)

这样的话可以通过Photo1Photo2等来计算:

SELECT
  SUM(CASE WHEN photo1 IS NOT NULL THEN 1 END) AS Photo1Count,
  SUM(CASE WHEN photo2 IS NOT NULL THEN 1 END) AS Photo2Count,
  SUM(CASE WHEN photo3 IS NOT NULL THEN 1 END) AS Photo3Count,
  SUM(CASE WHEN photo4 IS NOT NULL THEN 1 END) AS Photo4Count,
  SUM(CASE WHEN photo5 IS NOT NULL THEN 1 END) AS Photo5Count
FROM MyTable

这样的事情会算出有多少行至少有一张照片:

SELECT SUM (
  CASE WHEN
    photo1 IS NOT NULL OR
    photo2 IS NOT NULL OR
    photo3 IS NOT NULL OR
    photo4 IS NOT NULL OR
    photo5 IS NOT NULL THEN 1 END)
FROM MyTable

请注意,这些查询适用于总计。它们不按行显示活动。如果需要按行进行活动,请尝试Scorpi0或Michael Sivolobov的答案。

答案 2 :(得分:0)

这将是最好的查询:

SELECT
    Record_id,
    (6 - IFNULL(photo1,1) - IFNULL(photo2,1) - IFNULL(photo3,1) - IFNULL(photo4,1) - IFNULL(photo5,1) - IFNULL(photo6,1)) AS TOTAL
FROM
    table
相关问题