Сумма нескольких столбцов в пределах даты - PullRequest
0 голосов
/ 05 октября 2018

Добрый день всем, я должен сделать запрос, который суммирует несколько столбцов вместе.

$sqlannoprima = "SELECT fascia_prezzo,data,giorno,
   SUM (a1,a2,a3,a4,a5,a6,a7,a8) as atot, 
   SUM (g1,g2,g3,g4,g5,g6,gtesi,gg) as gtot,
   SUM (f1,f2,f,3,f4) as ftot, SUM (lt1,lt2,lt3,lt4,ltg) as lttot,
   FROM giorni 
   WHERE STR_TO_DATE(giorno, '%d/%m/%Y')- INTERVAL 1 YEAR BETWEEN STR_TO_DATE('" . $d1 . "', '%d/%m/%Y')- INTERVAL 1 YEAR 
     AND STR_TO_DATE('" . $d2 . "', '%d/%m/%Y')- INTERVAL 1 YEAR 
   GROUP BY giorno 
   ORDER BY STR_TO_DATE(giorno, '%d/%m/%Y')- INTERVAL 1 YEAR";

, но SQL возвращает ошибку, когда я пытаюсь напечатать результаты.

Уведомление: Попытка получить свойство необъекта в E: \ EasyPHP \ data \ localweb \ cdm \ stats.php в строке 377

И это в строке 377: $ risultatoannoprima = $ queryannoprima-> num_rows;

Что мне не хватает?Большое спасибо

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

SUM() - агрегатная функция, она суммирует строки , чтобы суммировать столбцы использовать +, например:

(f1 + f2 + f3 + f4)  as ftot

или

SUM(f1 + f2 + f3 + f4) as ftot

, если вы хотите суммировать по строкам и столбцам

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

ВЫБЕРИТЕ fasia_prezzo, данные, giorno, SUM (a1) как a1, SUM (a2) как a2, SUM (a3) ​​как a3, SUM (a4) как a4, SUM (a4) как a4, SUM (a5) какa5, SUM (a6) как a6, SUM (a7) как a7, SUM (a8) как a8, (SUM (a1) + SUM (a2) + SUM (a3) ​​+ SUM (a4) + SUM (a5) + SUM(a6) + СУММА (a7) + СУММА (a8)) как atot ОТ giorni ГДЕ STR_TO_DATE (giorno, '% d /% m /% Y') МЕЖДУ STR_TO_DATE ('". $ d1."', '% d /% m /% Y ') И STR_TO_DATE (' ". $ d2." ','% d /% m /% Y ') GROUP BY fasia_prezzo, data, giorno ORDER BY STR_TO_DATE (giorno,'% d /% m /% Y ')

0 голосов
/ 05 октября 2018

Вам нужно удалить последние , после lttot в вашем sql. Кроме того, вам лучше использовать (INTERVAL 1 YEAR) вместо INTERVAL 1 YEAR напрямую

  $sqlannoprima = "SELECT fascia_prezzo,data,giorno,
   SUM (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8) as atot, 
   SUM (g1 + g2 + g3 + g4 + g5 + g6 + gtesi + gg) as gtot,
   SUM (f1 + f2 +f3 + f4) as ftot, 
   SUM (lt1 + lt2 + lt3 + lt4 + ltg) as lttot
   FROM giorni 
   WHERE STR_TO_DATE(giorno, '%d/%m/%Y')- (INTERVAL 1 YEAR) BETWEEN STR_TO_DATE('" . $d1 . "', '%d/%m/%Y')- (INTERVAL 1 YEAR) AND STR_TO_DATE('" . $d2 . "', '%d/%m/%Y')- (INTERVAL 1 YEAR) GROUP BY giorno 
   ORDER BY (STR_TO_DATE(giorno, '%d/%m/%Y')- (INTERVAL 1 YEAR))";
...