Как разделить каждую строку столбца по его максимальному минимальному значению SQL? - PullRequest
0 голосов
/ 31 марта 2019

У меня есть таблица "datakota", которая имеет 9 полей, затем я сделал запрос, чтобы выбрать максимальное, минимальное значение для всех полей.Но результат показал значение «1» всего ряда.Пожалуйста, помогите мне, если я ошибаюсь.

|id| |kota_kab| |ipm| |pddmiskin| |ginirasio| |rasio_k| |indks_pend| |indks_kes| |ppk| |tpt| |tpak|

SELECT ipm/MAX(ipm) AS maxipm,
       pddmiskin/MIN(pddmiskin) AS minpddmiskin, 
       ginirasio/MIN(ginirasio) AS minginirasio, 
       rasio_k/MIN(rasio_k) AS minrasio_k, 
       indks_pend/MIN(indks_pend) AS minpend, 
       indks_kes/MAX(indks_kes) AS maxkes,
       ppk/MAX(ppk) AS maxppk,
       tpt/MIN(tpt) AS mintpt, 
       tpak/MAX(tpak) AS maxtpak 
FROM datakota

1 Ответ

1 голос
/ 31 марта 2019

В MySQL 5.7 и ниже вам нужно будет выполнить всю агрегацию в отдельном подзапросе, а затем выполнять деление по строкам:

SELECT ipm/maxipm,
       pddmiskin/minpddmiskin, 
       ginirasio/minginirasio, 
       rasio_k/minrasio_k, 
       indks_pend/minpend, 
       indks_kes/maxkes,
       ppk/maxppk,
       tpt/mintpt, 
       tpak/maxtpak 
FROM datakota d
JOIN (SELECT MAX(ipm) AS maxipm,
             MIN(pddmiskin) AS minpddmiskin, 
             MIN(ginirasio) AS minginirasio, 
             MIN(rasio_k) AS minrasio_k, 
             MIN(indks_pend) AS minpend, 
             MAX(indks_kes) AS maxkes,
             MAX(ppk) AS maxppk,
             MIN(tpt) AS mintpt, 
             MAX(tpak) AS maxtpak 
      FROM datakota) minmax

В MySQL 8.0+ вы можете использовать оконные функциичтобы упростить запрос:

SELECT ipm/(MAX(ipm) OVER ()) AS maxipm,
       pddmiskin/(MIN(pddmiskin) OVER ()) AS minpddmiskin, 
       ginirasio/(MIN(ginirasio) OVER ()) AS minginirasio, 
       rasio_k/(MIN(rasio_k) OVER ()) AS minrasio_k, 
       indks_pend/(MIN(indks_pend) OVER ()) AS minpend, 
       indks_kes/(MAX(indks_kes) OVER ()) AS maxkes,
       ppk/(MAX(ppk) OVER ()) AS maxppk,
       tpt/(MIN(tpt) OVER ()) AS mintpt, 
       tpak/(MAX(tpak) OVER ()) AS maxtpak 
FROM datakota
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...