У меня есть запрос MySQL, который вычисляет значения из таблицы. В моей программе мне нужно отобразить необработанные значения и процентное значение, например. «Вы использовали 1 из 100 (1%)». Насколько я знаю, было бы лучше использовать сервер базы данных для расчетов вместо бэкэнд (php в моем случае). Так что я пытался что-то вроде этогоMySQL получает значения и вычисляет процент с ними
SELECT SUM(used) AS totalUsed, MAX(quota) AS totalQuota, 100 * totalUsed/totalQuota AS percentUsed
Но я получил ошибку, потому что база данных двигатель не может найти поля «totalUsed» и «totalQuota». Делая некоторые интернет-статьи, я узнал, что, похоже, невозможно использовать псевдоним позже в SELECT-Part, как переменная. Люди там рекомендуют использовать подзаголовок. Я не думаю, что подсекции не хороши, если их можно избежать. В моем случае я получаю данные из разных таблиц, и я использую JOINs, особенно, чтобы избежать подзапроса-запросов.
Я думаю, что я имею два варианта решения этой проблемы:
- Я делаю это классический путь, и пусть PHP вычислить процентное-значение в цикле
Я снова использовать агрегатные функции в расчете, как это:
SELECT SUM(used) AS totalUsed, MAX(quota) AS totalQuota, 100 * SUM(used)/MAX(quota) AS percentUsed I
Но здесь я не знаю, как MySQL работает на запросе: является ли MySQL достаточно умен, чтобы увидеть: SUM (используется) 2 раза в запросе, поэтому MySQL сделать расчет как для aggretate fun sUM и MAX только один раз, а во второй раз он использует переменную. Или mysql просто не заботится об этом и делает вычисления дважды? Я думаю, это важно, потому что если mysql умный и делает расчет только один раз, я думаю, что было бы лучше, если бы mysql выполнил эту работу. Но если нет, php будет более впечатляющим в моем оппионе.