2017-09-26 22 views
0

我有一个表,看起来是这样的:SQL如何算一列时,另一列是不同的

fin_aid_status | student_number 
---------------|--------------- 
YES   | 111222 
YES   | 111222 
       | 111333 
YES   | 111444 

我要计算其中student_number被复制fin_aid_status但不重复计算的行数。所以我想从这张表中得到的结果是2.不是3,因为111222在表格中两次。表格中还有许多其他列,但只是在表格中寻找唯一值将不起作用。

编辑:这是甲骨文

比如我使用这样的代码已经:

select count(*), count(distinct student_number) from table 

因此,对于第三列我会想依靠独特的学生人数财政援助的数量。

所以我期望的输出将是:

count(*) | count(distinct student_number) | count_fin_aid 
4  | 3        | 2 
+0

PLS。标记您正在使用的数据库名称(mysql,mssql,orcle等) –

+0

也会添加您的预期结果,您尝试过的代码。 –

+0

我编辑了我原来的问题。 –

回答

1

当fin_aid_status不为空时,使用case语句来评估student_number;然后计算不同的值。

SELECT count(Distinct case when fin_aid_status is not null 
          then student_number end) as Distinct_Student 
FROM tbl; 

结果使用的示例数据:2

鉴于甲骨文:

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; 
+0

是的!!!非常感谢!这正是我需要的。 –

0

如果你正在使用MySQL,你可以如下写的东西,如果你想要的是数

SELECT count(DISTINCT student_number) FROM your_table WHERE fin_aid_status = 'YES'; 
+0

我不能这样做,因为那么我做的其他计数将会因为fin_aid_status而被破坏。 –

0

我假设在这里,加一些预期的结果,但:

SELECT fin_aid_status, 
     COUNT(DISTINCT student_number) 
FROM tablename 
GROUP BY fin_aid_status; 

会给你每个v的student_number列中不同值的计数在fin_aid_status列中的线索

相关问题