Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在图表中添加零值_Mysql - Fatal编程技术网

Mysql 在图表中添加零值

Mysql 在图表中添加零值,mysql,Mysql,我构建了以下查询: SELECT GVA14.COD_ZONA, Sum(GVA12.IMPORTE) AS SumOfIMPORTE FROM GVA14 LEFT JOIN GVA12 ON GVA14.COD_CLIENT = GVA12.COD_CLIENT WHERE Month(GVA12.FECHA_EMIS)=Month(curdate()) AND Year(GVA12.FECHA_EMIS)=Year(curdate()) GROUP BY GVA14.COD_ZONA

我构建了以下查询:

SELECT GVA14.COD_ZONA, Sum(GVA12.IMPORTE) AS SumOfIMPORTE
FROM GVA14 LEFT JOIN GVA12 
  ON GVA14.COD_CLIENT = GVA12.COD_CLIENT
WHERE Month(GVA12.FECHA_EMIS)=Month(curdate())
AND Year(GVA12.FECHA_EMIS)=Year(curdate())
GROUP BY GVA14.COD_ZONA;
SELECT GVA14.COD_ZONA, Coalesce(Sum(GVA12.IMPORTE), 0) AS SumOfIMPORTE
FROM GVA14 
LEFT JOIN GVA12 
  ON GVA14.COD_CLIENT = GVA12.COD_CLIENT
  AND Month(GVA12.FECHA_EMIS)=Month(curdate())
  AND Year(GVA12.FECHA_EMIS)=Year(curdate())
GROUP BY GVA14.COD_ZONA;
但是在
COD_ZONA
中还有其他的值我想显示。如果我去掉月份和年份的过滤器,它们就在那里了。这里有一个SQL提琴供感兴趣的人使用


编辑1#

我现在有以下疑问:

SELECT GVA14.COD_ZONA, Sum(GVA12.IMPORTE) AS SumOfIMPORTE
FROM GVA14 LEFT JOIN GVA12 
  ON GVA14.COD_CLIENT = GVA12.COD_CLIENT
WHERE Month(GVA12.FECHA_EMIS)=Month(curdate())
AND Year(GVA12.FECHA_EMIS)=Year(curdate())
GROUP BY GVA14.COD_ZONA;
SELECT GVA14.COD_ZONA, Coalesce(Sum(GVA12.IMPORTE), 0) AS SumOfIMPORTE
FROM GVA14 
LEFT JOIN GVA12 
  ON GVA14.COD_CLIENT = GVA12.COD_CLIENT
  AND Month(GVA12.FECHA_EMIS)=Month(curdate())
  AND Year(GVA12.FECHA_EMIS)=Year(curdate())
GROUP BY GVA14.COD_ZONA;
但当我试着执行它时,它需要110秒,而我需要的程序在此之前会超时。我根据@Bluefeet的建议创建了一个索引,并将其命名为Zones,其中包括GVA14.COD_ZONA


下一步怎么办?

WHERE
子句上的过滤器移动到
JOIN
条件。如果将筛选器保留在
WHERE
子句中,则查询的行为类似于
内部联接
,而不是
左联接

    SELECT GVA14.COD_ZONA
         , COALESCE(Sum(GVA12.IMPORTE),0) AS SumOfIMPORTE
      FROM GVA14 
      LEFT 
      JOIN GVA12 
        ON GVA14.COD_CLIENT = GVA12.COD_CLIENT
       AND Month(GVA12.FECHA_EMIS)=Month(curdate())
       AND Year(GVA12.FECHA_EMIS)=Year(curdate())
     GROUP 
        BY GVA14.COD_ZONA;
SELECT GVA14.COD_ZONA, Coalesce(Sum(GVA12.IMPORTE), 0) AS SumOfIMPORTE
FROM GVA14 
LEFT JOIN GVA12 
  ON GVA14.COD_CLIENT = GVA12.COD_CLIENT
  AND Month(GVA12.FECHA_EMIS)=Month(curdate())
  AND Year(GVA12.FECHA_EMIS)=Year(curdate())
GROUP BY GVA14.COD_ZONA;

结果:

| COD_ZONA | SUMOFIMPORTE |
---------------------------
|       01 |         3000 |
|       02 |         1000 |
|       03 |            0 |

我通过在表上添加4个索引(不知道是否太多!)来解决这个问题。它工作了…

现在唯一的问题是执行需要很长时间,有时会导致超时。这可能是因为一个大的表吗?表上有索引吗?在Navicat中,执行需要110秒。那么长还是不长?我不认为有任何索引。我现在已经添加了一个索引,接下来呢?