两个选择语句

时间:2013-04-24 01:08:53

标签: mysql

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)

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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

然后,如果你有更多的计数,你将添加更多的案例表达。

或者您可以使用:

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