Способ использования min выглядит следующим образом:
SELECT
S.AVERAGE_STUDENT_ATTENDANCE
, S.COMMUNITY_AREA_NAME
, C.HARDSHIP_INDEX
FROM CHICAGO_PUBLIC_SCHOOLS AS S
INNER JOIN CENSUS_DATA AS C ON C.COMMUNITY_AREA_NUMBER = S.COMMUNITY_AREA_NUMBER
WHERE C.HARDSHIP_INDEX = 96
AND S.AVERAGE_STUDENT_ATTENDANCE = (
SELECT
MIN( S.AVERAGE_STUDENT_ATTENDANCE )
FROM CHICAGO_PUBLIC_SCHOOLS AS S
INNER JOIN CENSUS_DATA AS C ON C.COMMUNITY_AREA_NUMBER = S.COMMUNITY_AREA_NUMBER
WHERE C.HARDSHIP_INDEX = 96
)
В зависимости от используемой базы данных, если она поддерживает общие выражения таблиц, вы можете сделать это:
WITH cte
AS (
SELECT
S.AVERAGE_STUDENT_ATTENDANCE
, S.COMMUNITY_AREA_NAME
, C.HARDSHIP_INDEX
FROM CHICAGO_PUBLIC_SCHOOLS AS S
INNER JOIN CENSUS_DATA AS C ON C.COMMUNITY_AREA_NUMBER = S.COMMUNITY_AREA_NUMBER
WHERE C.HARDSHIP_INDEX = 96
)
SELECT
*
FROM cte
WHERE AVERAGE_STUDENT_ATTENDANCE = (
SELECT
MIN( AVERAGE_STUDENT_ATTENDANCE )
FROM cte
)
Если ваша версия MySQL поддерживает оконные функции (v8 или новее), то может также работать что-то вроде этого:
SELECT
AVERAGE_STUDENT_ATTENDANCE
, COMMUNITY_AREA_NAME
, HARDSHIP_INDEX
FROM (
SELECT
S.AVERAGE_STUDENT_ATTENDANCE
, S.COMMUNITY_AREA_NAME
, C.HARDSHIP_INDEX
, MIN( S.AVERAGE_STUDENT_ATTENDANCE ) OVER () AS min_att
FROM CHICAGO_PUBLIC_SCHOOLS AS S
INNER JOIN CENSUS_DATA AS C ON C.COMMUNITY_AREA_NUMBER = S.COMMUNITY_AREA_NUMBER
WHERE C.HARDSHIP_INDEX = 96
) sq
WHERE AVERAGE_STUDENT_ATTENDANCE = min_att
Примечание OVER()
, т.е. ничего внутри предложения over, не разрешено во всех базах данных, это можетвместо этого нужно что-то вроде over(partition by C.HARDSHIP_INDEX)
.