0

有点新手,对你来说可能是一个非常基本的问题,但让我发疯。

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

所以,Record_id,照片1,照片2,照片3,照片4,照片5,照片6

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

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

它可能与 SUM 或 COUNT 有关,但花了很长时间试图获得组合或正确的键/语法!任何人都可以通过给出 mysql select 语句的示例来帮助 - 将不胜感激!

4

3 回答 3

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
于 2013-04-23T12:04:26.937 回答
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 的答案。

于 2013-04-23T12:09:50.950 回答
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
于 2013-04-23T12:13:43.307 回答