SQL Выберите несколько подсчетов на основе одного предложения WHERE - PullRequest
1 голос
/ 30 апреля 2020

В моей таблице есть такие данные:

Number  Date
18-000  2018-01-05  
18-001  2018-01-08
.......
Number  Date
19-350  2019-01-22
19-351  2019-01-22
19-352  2019-01-22
........
Number  Date
20-649  2020-01-24
20-650  2020-01-27

Таким образом, 2 цифры перед каждым числом указывают год. Я хочу иметь возможность посчитать по всем строкам, сколько начинается с 18, 19 и 20 (разделено). Я сделал это для 18, и это:

SELECT COUNT(Number) totalSUM
FROM my_table
where Number like N'18-%'

но как я могу получить 3 строки возвращенных с totalSUM за год?

Ответы [ 2 ]

3 голосов
/ 30 апреля 2020

Вы можете просто взять 2 левых символа столбца Number и сгруппировать их следующим образом:

SELECT LEFT(Number, 2) AS year,
       COUNT(Number) AS totalSUM
FROM my_table
GROUP BY LEFT(Number, 2)

Вывод данных для образца:

year    totalSUM
18      2
19      3
20      2

MySQL демо на dbfiddle

SQL демо сервера на dbfiddle

2 голосов
/ 30 апреля 2020

В случае, если число слева от da sh имеет переменную длину (например, 1-, 10-, 100-):

MySQL:

SELECT LEFT(number, LOCATE('-', number) - 1), COUNT(*)
FROM @t
GROUP BY LEFT(number, LOCATE('-', number) - 1)

SQL Сервер:

SELECT LEFT(number, CHARINDEX('-', number) - 1), COUNT(*)
FROM @t
GROUP BY LEFT(number, CHARINDEX('-', number) - 1)
...