SQL неизвестные столбцы? - PullRequest
       63

SQL неизвестные столбцы?

1 голос
/ 22 февраля 2020

Я новичок в SQL и испытываю затруднения с этим запросом:

Среднее превышение каждого округа Техас, в котором содержится один или несколько почтовых индексов с населением более 20 000 человек.

Это это то, что у меня есть:

SELECT county, zip_code, state, AVG(elevation) 
FROM zip_codes 
WHERE state=’TX’  
GROUP BY county 
HAVING population > 20000 
ORDER BY county;

ОШИБКА 1054 (42S22): неизвестный столбец '' TX '' в 'выражении where'

Но когда я выбираю state из базы данных zip_codes она там есть.

Ответы [ 4 ]

3 голосов
/ 22 февраля 2020

Вы используете неправильно одинарные кавычки. Должно быть

WHERE state = 'tx'

вместо

WHERE state = ’tx’

Ваши ... откуда? Некоторые редакторы, такие как MS Word или аналогичные, которые создают эти «модные» цитаты. Ну, не используйте их.

Кроме того, не агрегированные столбцы должны все быть частью предложения GROUP BY:

group by county, zip_code, state
1 голос
/ 23 февраля 2020

Исправление проблем с кавычками является обязательным, как ответил Littlefoot.

Однако ваш запрос по-прежнему недействителен Oracle SQL, поскольку:

  • предложение select имеет два неагрегированных столбца, которые не являются частью предложения group by (zip_code и state)

  • То же самое относится к столбцу population в предложении having, которое не является ни агрегированным, ни частью предложения group by

Для этого назначения:

Среднее превышение каждого Графство Техас, которое содержит один или несколько почтовых индексов с населением более 20 000 человек.

Предполагается, что каждая запись в таблице соответствует отдельному почтовому индексу (который представляется актуальным, учитывая, что сама таблица называется zip_codes), вы можете написать:

select county, state, avg(elevation) avg_elevation
from zip_codes 
where state= 'TX'  
group by county, state 
having max(population) > 20000 
order by county;
0 голосов
/ 23 февраля 2020

Без выборки данных трудно точно понять, что происходит, но я попытаюсь это сделать.

В вашем задании сказано, что вы должны вычислять "Среднее превышение в каждом округе Техаса, которое содержит один или более почтовый индекс с населением более 20 000 ". Давайте разберем элементы задания, которое вам нужно найти:

Average elevation
  Of each county in Texas
    Which has one or more zip code
      With population > 20,000

И у нас есть таблица почтовых индексов с указанием округа, штата и высоты.

Итак, ОК - первая проблема: найти все почтовые индексы в Техасе:

SELECT *
  FROM ZIP_CODES
  WHERE STATE = 'TX'

ОК, пока все просто. Теперь ограничьте его почтовыми индексами с населением более 20 000:

SELECT *
  FROM ZIP_CODES
  WHERE STATE = 'TX' AND
        POPULATION > 20000

Классно - но это дает нам запись для каждого почтового индекса в округе с населением> 20000. Все, что нас волнует, это отдельные лица округа, которые имеют по крайней мере один почтовый индекс с населением более 20K. Так как насчет

SELECT DISTINCT COUNTY
  FROM ZIP_CODES
  WHERE STATE = 'TX' AND
        POPULATION > 20000

Отлично. Теперь нам нужно вычислить среднее превышение в каждом округе, возвращаемое по вышеуказанному запросу:

SELECT COUNTY, AVG(ELEVATION)
  FROM ZIP_CODES
  WHERE STATE = 'TX' AND
        COUNTY IN (SELECT DISTINCT COUNTY
                     FROM ZIP_CODES
                     WHERE STATE = 'TX' AND
                           POPULATION > 20000)
  GROUP BY COUNTY
  ORDER BY COUNTY

И вот ваш ответ.

0 голосов
/ 22 февраля 2020
SELECT county, zip_code, state, AVG(elevation) 
FROM zip_codes 
WHERE state='TX'
GROUP BY county,  zip_code, state 
where population > 20000 
ORDER BY county;
...