SQL基于同一WHERE子句选择多个计数



在我的表中有这样的数据:

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

因此,每个数字前面的两位数字表示年份。我希望能够在所有行中计算出有多少行以18、19和20(分隔(开头。我做了18年,现在是:

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

但是我如何才能返回3行,每行包含一年的totalSUM?

您可以简单地将Number列的左2个字符分组为:

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

dbfiddle 上的MySQL演示

dbfidd上的SQL Server演示

如果短划线左边的数字长度可变(例如1-、10-、100-(:

MySQL:

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

SQL Server:

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

最新更新