Запрос: SUM, AVG 3 дня данных?

0

Вот мой sqlFiddle - http://sqlfiddle.com/#!9/a6ed6a/3

У меня есть журнал с информацией о продуктах, калориях, дате и граммах белка, жиров и углеводов.

Я пытаюсь рассчитать процент углеводов, белков и жиров, потребляемых каждый день в течение 3 дней подряд для каждого пользователя.

Я получаю данные с помощью этого запроса:

SELECT foodName, calories, carbs, fat, protein, logDate
FROM Students
LEFT JOIN FoodLog
ON Students.id=FoodLog.studentID  
WHERE FoodLog.studentID  != ''
AND logDate >= '2019-02-03' AND logDate <= '2019-02-05'
ORDER BY 'FoodLog'.'logDate'  ASC

Однако, когда я пытаюсь получить данные с процентом, я получаю только один продукт, как показано в следующем запросе:

SELECT foodName, calories, carbs, fat, protein, logDate,
((SUM(carbs)*4)/SUM(calories))*100 AS percentCarbs
FROM Students
LEFT JOIN FoodLog
ON Students.id=FoodLog.studentID  
WHERE FoodLog.studentID  != ''
AND logDate >= '2019-02-03' AND logDate <= '2019-02-05'
ORDER BY 'FoodLog'.'logDate'  ASC

Любая помощь будет высоко ценится!

Спасибо,

Тим

  • 2
    Вы забыли добавить Group By на foodName . Это даст вам пищевое распределение данных.
  • 0
    Спасибо!! :) Это решило проблему с возвращением только одного результата. Теперь он показывает все дни, но процент углеводов показан для каждого продукта, а не для каждого дня. Должен ли я просто сделать это с помощью кода PHP или есть лучший способ с моим запросом?
Показать ещё 1 комментарий
Теги:
average

1 ответ

1
Лучший ответ

Я полагаю, что вы просто скучаете по группе

SELECT foodName, calories, carbs, fat, protein, logDate,
((SUM(carbs)*4)/SUM(calories))*100 AS percentCarbs
FROM Students
LEFT JOIN FoodLog
ON Students.id=FoodLog.studentID  
WHERE FoodLog.studentID  != ''
AND logDate >= '2019-02-03' AND logDate <= '2019-02-05'
GROUP BY FoodLog.studentID, logDate
ORDER BY 'FoodLog'.'logDate'  ASC
  • 0
    Спасибо. Когда я запускаю этот запрос, я получаю проценты карбонатов за каждый продукт, а не проценты за каждый день. Вот скрипка, показывающая, что - sqlfiddle.com/#!9/a6ed6a/6 Результат, который я пытаюсь получить, будет следующим: 3/3/2019 в качестве примера. Так как общее количество граммов углеводов в этот день составляет 35 + 43 = 78 * 4 = 312 (4 калории на грамм). Общее количество калорий за этот день составляет 170 + 254 = 424. 312/424 будет 73,5% углеводов, потребляемых за 3/3/2019. Я не уверен, как отредактировать запрос, чтобы сделать это, или легче / лучше выполнить эти вычисления с помощью PHP?
  • 1
    попробуйте удалить группу по названию еды. если это не сработает, то я не уверен, что понимаю вашу проблему
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню