2

我有一张如下表 -

Student ID | History | Maths | Geography
1               A        B         B     
2               C        C         E
3               D        A         B
4               E        D         A

如何通过单个 sql 查询找出有多少学生历史 A、数学 B 和地理 E?

4

3 回答 3

4

如果您想在一列中获得历史 A 的学生人数,第二列中获得数学 B 的学生人数和第三列中获得地理 E 的学生人数,那么:

select
    sum(case when [History] = 'A' then 1 else 0 end) as HistoryA,
    sum(case when [Maths] = 'B' then 1 else 0 end) as MathsB,
    sum(case when [Geography] = 'E' then 1 else 0 end) as GeographyC
from Table1

如果要计算历史 A、数学 B 和地理 E 的学生:

select count(*)
from Table1
where [History] = 'A' and [Maths] = 'B' and [Geography] = 'E'
于 2013-09-05T19:10:03.580 回答
3

如果您想要独立计数,请使用:

SELECT SUM(CASE WHEN Condition1 THEN 1 ELSE 0 END) AS 'Condition1'
      ,SUM(CASE WHEN Condition2 THEN 1 ELSE 0 END) AS 'Condition2'
      ,SUM(CASE WHEN Condition3 THEN 1 ELSE 0 END) AS 'Condition3'
FROM YourTable

如果您想要一个计数使用多个条件:

SELECT COUNT(*)
FROM YourTable
WHERE Condition1
  AND Condition2
  AND Condition3

听起来你想要多个独立的计数:

SELECT SUM(CASE WHEN History = 'A' THEN 1 ELSE 0 END) AS 'History A'
      ,SUM(CASE WHEN Maths = 'B' THEN 1 ELSE 0 END) AS 'Maths B'
      ,SUM(CASE WHEN Geography = 'E' THEN 1 ELSE 0 END) AS 'Geography E'
FROM YourTable
于 2013-09-05T19:11:06.727 回答
1

您可以尝试从多个选择语句中进行选择

SELECT t1.*, t2.*, t3.* FROM
(SELECT COUNT(*) AS h FROM students WHERE History = 'A') as t1,
(SELECT COUNT(*) AS m FROM students WHERE Maths = 'B') as t2,
(SELECT COUNT(*) AS g FROM students WHERE Geography = 'E') as t3
于 2013-09-05T19:14:47.680 回答