#sql #sql-server #sql-server-2012
#sql #sql-сервер #sql-server-2012
Вопрос:
Я немного запутался в этом. Я хотел бы перечислить количество имен, начинающихся с одной и той же буквы, и найти общее количество имен, содержащих эту первую одинаковую букву.
Например:
name | total
-------|--------
A | 12
B | 10
C | 8
D | 7
E | 3
F | 2
...
Z | 1
12 имен, начинающихся с буквы «A», 10 с «B» и так далее.
Это то, что у меня есть до сих пор
SELECT
LEFT(customers.name,1) AS 'name'
FROM customers
WHERE
customers.name LIKE '[a-z]%'
GROUP BY name
Однако я не уверен, как я буду складывать столбцы на основе похожих значений.
Комментарии:
1. Вы не можете ссылаться на псевдоним в
group by
if, если это то, что вы пытаетесь сделать.
Ответ №1:
Это должно сработать для вас:
SELECT
LEFT(customers.name,1) AS 'name',
COUNT(*) AS NumberOfCustomers
FROM customers
WHERE
customers.name LIKE '[a-z]%'
GROUP BY LEFT(customers.name,1)
РЕДАКТИРОВАТЬ: забыл объяснение; как многие уже упоминали, вам нужно группировать само вычисление, а не псевдоним, который вы ему даете, поскольку операция GROUP BY фактически выполняется до выбора и, следовательно, пока не имеет представления об псевдониме. Часть ПОДСЧЕТА вы бы легко разобрались. Надеюсь, это поможет.
Ответ №2:
Вы не хотите считать имена, а только первые буквы. Поэтому вы не должны group by name
, но группировать по первой букве
SELECT LEFT(name, 1) AS name, count(*)
FROM customers
GROUP BY LEFT(name, 1)