Mysql IFNULL查询给出两行相同的结果
我想在我的项目中做一份年度报告。我很难让这个查询返回一行中的计数。如果没有其他年份的交易(如本例中的2016年),结果显示为1行 当我在执行此代码时插入与“本”年不同的年份的事务时,结果显示具有相同结果的两行: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
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
它将给出它发现的所有月份和年份的结果,以及您可以在代码中处理的丢失的月份