Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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_Sql_Date_Select - Fatal编程技术网

Mysql 选择:汇总值并按日期分组

Mysql 选择:汇总值并按日期分组,mysql,sql,date,select,Mysql,Sql,Date,Select,所以我的目标是总结我的价值观并按日期分组 起初我只是写了它提供的日期,但我需要提供与YY-MM-DD,YY-MM和YYYY格式的总和 看起来是这样的: year month day Total 2017 7 24 476.00 2017 7 26 1992.20 2017 7 30 877.50 2017 7 3345.70 2017 8 2

所以我的目标是总结我的价值观并按日期分组

起初我只是写了它提供的日期,但我需要提供与YY-MM-DD,YY-MM和YYYY格式的总和

看起来是这样的:

year    month   day     Total
2017    7       24      476.00
2017    7       26      1992.20
2017    7       30      877.50
2017    7               3345.70
2017    8       2       2362.40
2017    8               2362.40
2017                    5708.10
                        5708.10
现在我已经知道了这一点:

SELECT Cast(Tabl1.Date as Date) AS 'Date', Concat(Round(SUM((ISNULL(Price.Morning,0) + ISNULL(Price.Day,0) + ISNULL(Price.Evening,0))*Tickets.Count),2),' €') AS 'Total'
FROM Table1
JOIN Tickets ON Tickets.Table1_ID = Table1.Table1_ID
JOIN Price ON Tickets.Price_ID = Price.Price_ID
GROUP BY Date;
我明白了:

所有的…ConcatRoundSUMISNULLPrice。早上,0+ISNULLPrice。白天,0+ISNULLPrice。晚上,0*张票。计数,2,“€”作为“总计”。。。是必需的,因为数据库中有空值,这就是为什么我使用ISNULL函数,如果它为空,则使用0,否则它会破坏所有计算

您可以在此处看到该表:

问题是GROUP BY Date是按表中的Date列进行分组的,而不是按日期别名。将其更改为:

GROUP BY DATE(Date)

您可以通过使用“分组方式”和“汇总”获得您想要的内容。如果没有任何样本数据,很难100%确定,但是这个查询应该可以工作。请注意,您可以使用来选择价格中的非空值,而无需在每个价格上使用IFNULL

SELECT YEAR(Table1.Date) AS year
     , MONTH(Table1.Date) AS month
     , DAY(Table1.Date) AS day
     , Round(SUM(COALESCE(Price.Morning, Price.Day, Price.Evening) * Tickets.count), 2) AS 'Total' 
FROM Table1
JOIN Tickets ON Tickets.Table1_ID = Table1.Table1_ID
JOIN Price ON Tickets.Price_ID = Price.Price_ID 
GROUP BY year, month, day WITH Rollup
这将为您提供一个如下所示的表格:

year    month   day     Total
2017    7       24      476.00
2017    7       26      1992.20
2017    7       30      877.50
2017    7               3345.70
2017    8       2       2362.40
2017    8               2362.40
2017                    5708.10
                        5708.10

修改了您的查询,将IsNull更改为IfNull,并将group by日期更改为:

SELECT DATE(Table1.Date) myDate, Concat(Round(SUM((IFNULL(Price.Morning,0) + IFNULL(Price.Day,0) + IFNULL(Price.Evening,0))*Tickets.count),2),' €') AS 'Total' 
FROM Table1
JOIN Tickets ON Tickets.Table1_ID = Table1.Table1_ID
JOIN Price ON Tickets.Price_ID = Price.Price_ID 
GROUP BY myDate;

ISNULLPrice.Night,0应为IFNULLPrice.Night,0。ISNULL只返回TRUE或FALSE,IFNULL返回第一个参数,但在第一个参数为null时使用第二个作为默认参数。您应该从中得到一个错误。这些答案之一解决了您的问题吗?如果没有,你能提供更多的信息来帮助回答这个问题吗?否则,请考虑标记答案,最好地解决了你的问题接受。看到了吗?当我尝试这个错误时,没有内置函数或类似的东西。你确定你使用的是MySQL,而不是SQL Server之类的DBMS吗?