1
SELECT COUNT( DISTINCT `student_id` ) 
FROM a
WHERE `marks` >=90

以上给了我分数大于 90 的学生数,

COUNT( DISTINCT `student_id` )
4

现在我想要两个答案,一个分数 > 90 另一个 > 80

像这样的东西

COUNT( DISTINCT `student_id` )  |COUNT( DISTINCT `student_id` )
    4                                            5

这是我在谷歌搜索后尝试过的

  select

count_1 =( SELECT COUNT( DISTINCT `student_id` ) 
FROM a
WHERE `marks` >=90),


count_2 =( SELECT COUNT( DISTINCT `student_id` ) 
FROM a
WHERE `marks` >=80)
4

2 回答 2

1

我认为最简单的答案是使用隐式布尔条件,因为 MySQL 支持它,

SELECT  SUM(marks >= 90) Count_1,
        SUM(marks >= 80) Count_1
FROM    a
WHERE   marks >= 80

WHERE子句使搜索更快,因为它将首先过滤记录而不是遍历所有记录。

于 2013-04-24T01:10:29.343 回答
0

您可以将CASE表达式与聚合函数一起使用:

SELECT 
  sum(case when `marks` >= 90 then 1 else 0 end) count_1,
  sum(case when `marks` >= 80 then 1 else 0 end) count_2
FROM a

然后,如果您有更多的计数,您将添加更多的 case 表达式。

或者您可以使用:

SELECT 
  count(distinct case when `marks` >= 90 then `student_id` end) count_1,
  count(distinct case when `marks` >= 80 then `student_id` end) count_2
FROM a
于 2013-04-24T01:11:11.930 回答