Как получить правильный синтаксис для поиска строки в таблице базы данных?

Перечислите описания состояний, начинающиеся с "NEW" и количество работодателей, расположенных в этом состоянии. Обязательно укажите все те состояния, которые начинаются с "NEW", даже если счетчик равен нулю. Убедитесь, что заголовки столбцов соответствуют тому, что показано ниже.

+---------------+---------------------+
| Description | Number of Companies |
+---------------+---------------------+
| NEW HAMPSHIRE | 0 |
| NEW JERSEY | 1 |
| NEW MEXICO | 0 |
| NEW YORK | 13 |
+---------------+---------------------+ 
4 rows in set (0.00 sec)

По этому вопросу я использовал:

SELECT state.description, COUNT(*) "Number of Commpanies"
FROM employer
WHERE SUBSTR(state.description, 1, INSTR(state.description, 'NEW')-1) AS "Number of Companies";

ОШИБКА:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'AS "N
umber of Companies"' at line 3

Почему я получаю это и что такое правильный синтаксис. Прежде всего, я не уверен, правильно ли задал вопрос. Таблица выглядит следующим образом:

mysql> DESCRIBE state;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| statecode | char(2) | | PRI | | |
| description | varchar(30) | | | | |
+-------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec) mysql>

mysql> SELECT * FROM работодатель

| companyname | division | address | city | statecode | zipcode |
| Acme Information Source | Customer Support | 132 Commerical Way | Cleveland | OH | 44234 |
| Ajax Software, Inc. | RandD | 2421 West Industrial Way | Berkeley | CA | 94710 |
| Ajax Software, Inc. | Production | 2421 West Industrial Way | Berkeley | CA | 94710 |
4 ответа

Попробуйте следующее:

SELECT s.description, count(e.*) as "Number of Companies"
 FROM employer e left join state s on e.statecode = s.statecode 
 WHERE s.description like 'NEW%'
 GROUP by 1


Правильный синтаксис для псевдонима столбца:

SELECT state.description, COUNT(*) AS "Number of Companies"
FROM employer
WHERE .. -- your logic here

Вы не можете добавить псевдоним столбца после WHERE, что не имеет смысла.

Тем не менее, у вас есть способ пойти на фактический ответ на вопрос. Например, вы ссылаетесь на таблицу state, но пока вы не присоединяетесь к ней.


Предложение where должно напоминать

where something = something

Схожая

where something as alias name

Однако простой ответ:

where state.description like 'NEW%'


Используйте JOIN, и вам не хватает GROUP BY

SELECT
 s.description,
 COUNT(*) AS "Number of Companies"
FROM state a
JOIN employer e ON s.statecode = e.statecode
WHERE s.description LIKE 'NEW%'
GROUP BY 1

licensed under cc by-sa 3.0 with attribution.