MySql SUM(),按月份分组,带';0';don';不出现

MySql SUM(),按月份分组,带';0';don';不出现,mysql,date,group-by,sum,Mysql,Date,Group By,Sum,我有一个MySql查询: SELECT YEAR(date), MONTHNAME(date), SUM(block_time) FROM flights WHERE operator = 'PSD' GROUP BY YEAR(date), MONTH(date) 我遇到的问题是,如果一个月的工作时间为零,那么它就不会出现在结果中。要查看所有月份是否有时间飞行,我需要更改哪些内容?您需要一个表格,其中包含您想要在结果中显示的所有年份/月份,并且需要按如下方式加入该表格 SELECT myMo

我有一个MySql查询:

SELECT YEAR(date), MONTHNAME(date), SUM(block_time)
FROM flights
WHERE operator = 'PSD'
GROUP BY YEAR(date), MONTH(date)

我遇到的问题是,如果一个月的工作时间为零,那么它就不会出现在结果中。要查看所有月份是否有时间飞行,我需要更改哪些内容?

您需要一个表格,其中包含您想要在结果中显示的所有年份/月份,并且需要按如下方式加入该表格

SELECT myMonths.theYear, myMonths.theMonth, COALESCE(theData.hours, 0)
FROM myMonths
LEFT JOIN (
    SELECT YEAR(date) AS theYear, MONTHNAME(date) AS theMonth, SUM(block_time) AS hours
    FROM flights
    WHERE operator = 'PSD'
    GROUP BY YEAR(date), MONTHNAME(date)
) theData
ON myMonths.theYear = theData.theYear
AND myMonths.theMonth = theData.theMonth

你需要一个表格,包括你想要的所有年/月的结果,并需要加入它如下

SELECT myMonths.theYear, myMonths.theMonth, COALESCE(theData.hours, 0)
FROM myMonths
LEFT JOIN (
    SELECT YEAR(date) AS theYear, MONTHNAME(date) AS theMonth, SUM(block_time) AS hours
    FROM flights
    WHERE operator = 'PSD'
    GROUP BY YEAR(date), MONTHNAME(date)
) theData
ON myMonths.theYear = theData.theYear
AND myMonths.theMonth = theData.theMonth

试着和那些没有时间的人联合起来

SELECT YEAR(date), MONTHNAME(date), SUM(block_time)
FROM flights
WHERE operator = 'PSD'
GROUP BY YEAR(date), MONTH(date)

UNION ALL 

SELECT YEAR(date), MONTHNAME(date), SUM(block_time)
FROM flights
WHERE hours = 0
GROUP BY YEAR(date), MONTH(date)

试着和那些没有时间的人联合起来

SELECT YEAR(date), MONTHNAME(date), SUM(block_time)
FROM flights
WHERE operator = 'PSD'
GROUP BY YEAR(date), MONTH(date)

UNION ALL 

SELECT YEAR(date), MONTHNAME(date), SUM(block_time)
FROM flights
WHERE hours = 0
GROUP BY YEAR(date), MONTH(date)

我称之为恶作剧。可能是因为所说的月份与
WHERE
子句不匹配吗?@pst-我想这就是问题所在-对于
WHERE
子句,当月没有航班,但月份(&year)仍应包含在结果集中,时间为0小时。我想,您可以有一个月表并加入其中。我不确定这是否是个好主意。我称之为恶作剧。可能是因为所说的月份与
WHERE
子句不匹配吗?@pst-我想这就是问题所在-对于
WHERE
子句,当月没有航班,但月份(&year)仍应包含在结果集中,时间为0小时。我想,您可以有一个月表并加入其中。我不确定这是不是个好主意。谢谢,我来试试。我会让你知道它是怎么回事。好吧,这绝对可能是我的错误,但现在我在所有月份都返回“0.0”。嘿,至少我在适当的月份有“0”。)现在我只需要把其他几个月的阻塞时间弄回来!我会继续摆弄它。@LazyB-您只需要确保您的
myMonths
表包含的年和月的格式与原始查询返回的格式相同。谢谢,我会尝试一下。我会让你知道它是怎么回事。好吧,这绝对可能是我的错误,但现在我在所有月份都返回“0.0”。嘿,至少我在适当的月份有“0”。)现在我只需要把其他几个月的阻塞时间弄回来!我会继续摆弄它。@LazyB-您只需要确保
myMonths
表中的年和月与原始查询返回的格式相同。