Выберите: Суммировать значения и Группировать по дате. - PullRequest
0 голосов
/ 08 ноября 2018

Итак, моя цель - СУММИТЬ мои ценности и сгруппировать их по дате.

Сначала я просто написал его с указанием даты, но мне нужно предоставить SUM в формате YY-MM-DD, YY-MM и YYYY.

SELECT Table1.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 Table1.Date
;

И это выглядитвот так:

And it looks like this

А теперь я дошел до этого:

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;

И я получил это:

And i get this

Все ...Concat(Round(SUM((ISNULL(Price.Morning,0) + ISNULL(Price.Day,0) + ISNULL(Price.Evening,0))*Tickets.Count),2),' €') AS 'Total'... необходимо, потому что в базе данных есть NULL значения, поэтому я использую функцию ISNULL и 0, если она NULL, потому что в противном случае она сломаетсявсе расчеты.

Вы можете увидеть эту таблицу здесь:

This is the table with Prices

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Вы можете получить что-то вроде того, что вы хотите, используя GROUP BY WITH ROLLUP. Без примеров данных трудно быть уверенным на 100%, но этот запрос должен работать. Обратите внимание, что вы можете использовать COALESCE, чтобы выбрать ненулевое значение в ценах, не используя 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
0 голосов
/ 08 ноября 2018

Изменил ваш запрос (изменил IsNull на IfNull) и сгруппировал по дате как:

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;
0 голосов
/ 08 ноября 2018

Проблема в том, что GROUP BY Date группируется по столбцу Date в таблице, а не по псевдониму Date. Измените его на:

GROUP BY DATE(Date)
...