Подсчет количества строк на основе похожих значений

#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)
  

SQLFiddle