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)
答案 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