Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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 IFNULL查询给出两行相同的结果_Mysql - Fatal编程技术网

Mysql IFNULL查询给出两行相同的结果

Mysql IFNULL查询给出两行相同的结果,mysql,Mysql,我想在我的项目中做一份年度报告。我很难让这个查询返回一行中的计数。如果没有其他年份的交易(如本例中的2016年),结果显示为1行 当我在执行此代码时插入与“本”年不同的年份的事务时,结果显示具有相同结果的两行: select ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=1)AND (YEAR(date)='2017'))),0) AS `Jan`, ifnull((SELECT COUNT(id) FROM

我想在我的项目中做一份年度报告。我很难让这个查询返回一行中的计数。如果没有其他年份的交易(如本例中的2016年),结果显示为1行

当我在执行此代码时插入与“本”年不同的年份的事务时,结果显示具有相同结果的两行:

select
  ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=1)AND (YEAR(date)='2017'))),0) AS `Jan`,
  ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=2)AND (YEAR(date)='2017'))),0) AS `Feb`,
  ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=3)AND (YEAR(date)='2017'))),0) AS `Mar`,
  ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=4)AND (YEAR(date)='2017'))),0) AS `Apr`,
  ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=5)AND (YEAR(date)='2017'))),0) AS `May`,
  ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=6)AND (YEAR(date)='2017'))),0) AS `Jun`,
  ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=7)AND (YEAR(date)='2017'))),0) AS `Jul`,
  ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=8)AND (YEAR(date)='2017'))),0) AS `Aug`,
  ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=9)AND (YEAR(date)='2017'))),0) AS `Sep`,
  ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=10)AND (YEAR(date)='2017'))),0) AS `Oct`,
  ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=11)AND (YEAR(date)='2017'))),0) AS `Nov`,
  ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=12)AND (YEAR(date)='2017'))),0) AS `Dec`
from transaction GROUP BY YEAR(date) 

是否有任何方法可以修复此查询或其他查询,使其正常工作?

如果您只需要2017年的数据,您应该在何处进行筛选

select
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=1)AND (YEAR(date)='2017'))),0) AS `Jan`,
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=2)AND (YEAR(date)='2017'))),0) AS `Feb`,
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=3)AND (YEAR(date)='2017'))),0) AS `Mar`,
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=4)AND (YEAR(date)='2017'))),0) AS `Apr`,
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=5)AND (YEAR(date)='2017'))),0) AS `May`,
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=6)AND (YEAR(date)='2017'))),0) AS `Jun`,
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=7)AND (YEAR(date)='2017'))),0) AS `Jul`,
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=8)AND (YEAR(date)='2017'))),0) AS `Aug`,
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=9)AND (YEAR(date)='2017'))),0) AS `Sep`,
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=10)AND (YEAR(date)='2017'))),0) AS `Oct`,
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=11)AND (YEAR(date)='2017'))),0) AS `Nov`,
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=12)AND (YEAR(date)='2017'))),0) AS `Dec`
     from transaction 
     where YEAR(date)='2017'
    GROUP BY YEAR(date) 
否则,对于数据中的每个数据,将执行相同的select in ifnull(与2017相关)并返回相同的值

您可以避免不可用()并重新选择,例如:

select
      sum(case when month(date)=1 and YEAR(date) = '2017' then 1 else 0 end ) as 'Jan'
      sum(case when month(date)=2 and YEAR(date) = '2017' then 1 else 0 end ) as 'Feb'
      ......
      sum(case when month(date)=12 and YEAR(date) = '2017' then 1 else 0 end ) as 'Dec'
 from transaction
  where YEAR(date)='2017'
  GROUP BY YEAR(date) 

我在
SUM
函数中添加了一个条件。如果此条件(
Month(date)=1)和(YEAR(date)='2017'
)返回true,则它将返回1,否则返回0

select
SUM(Month(date)=1) AND (YEAR(date)='2017') AS `Jan`,
SUM(Month(date)=2) AND (YEAR(date)='2017') AS `Feb`,
SUM(Month(date)=3) AND (YEAR(date)='2017') AS `Mar`,
SUM(Month(date)=4) AND (YEAR(date)='2017') AS `Apr`,
SUM(Month(date)=5) AND (YEAR(date)='2017') AS `May`,
SUM(Month(date)=6) AND (YEAR(date)='2017') AS `Jun`,
SUM(Month(date)=7) AND (YEAR(date)='2017') AS `Jul`,
SUM(Month(date)=8) AND (YEAR(date)='2017') AS `Aug`,
SUM(Month(date)=9) AND (YEAR(date)='2017') AS `Sep`,
SUM(Month(date)=10) AND (YEAR(date)='2017') AS `Oct`,
SUM(Month(date)=11) AND (YEAR(date)='2017') AS `Nov`,
SUM(Month(date)=12) AND (YEAR(date)='2017') AS `Dec`
from transaction
GROUP BY YEAR(date) 

下面是一般查询

SELECT COUNT(id), YEAR(created) as year, MONTH(created) as mon
FROM transaction
WHERE date IS NOT NULL
GROUP BY YEAR(date), MONTH(date) Desc
它将给出它发现的所有月份和年份的结果,以及您可以在代码中处理的丢失的月份