我有一张看起来像这样的表:
fin_aid_status | student_number
---------------|---------------
YES | 111222
YES | 111222
| 111333
YES | 111444
我想计算重复student_number的fin_aid_status
但不计算双重计数的行数。所以我希望从这个表中得到的结果是2.不是3因为111222
在表中两次。表中还有许多其他列,但只是在表中查找唯一值是行不通的。
编辑:这是 Oracle 。
例如我已经使用了这样的代码:
select count(*), count(distinct student_number) from table
因此,对于第三栏,我想用唯一的学生数来计算经济援助的数字。
所以我的预期输出是:
count(*) | count(distinct student_number) | count_fin_aid
4 | 3 | 2
答案 0 :(得分:1)
当fin_aid_status不为null时,使用case语句来计算student_number;然后计算不同的值。
SELECT count(Distinct case when fin_aid_status is not null
then student_number end) as Distinct_Student
FROM tbl;
使用样本数据的结果:2
鉴于Oracle:
With cte (fin_aid_status, student_number) as (
SELECT 'YES' , 111222 from dual union all
SELECT 'YES' , 111222 from dual union all
SELECT '' , 111333 from dual union all
SELECT 'YES' , 111444 from dual )
SELECT count(Distinct case when fin_aid_status is not null
then student_number end) as DistinctStudentCnt
FROM cte;
答案 1 :(得分:0)
如果你使用的是MySQL,你可以写下如下所示的内容,如果你想要的只是计数
SELECT count(DISTINCT student_number) FROM your_table WHERE fin_aid_status = 'YES';
答案 2 :(得分:0)
我假设在这里,添加一些预期的结果,但是:
SELECT fin_aid_status,
COUNT(DISTINCT student_number)
FROM tablename
GROUP BY fin_aid_status;
将为fin_aid_status列中每个值的student_number列提供不同值的计数