2012-12-23 4 views
1

나는 튜토리얼 등을 들었는지 여부에 대한 데이터가있는 학생들의 테이블이 있습니다. 아래에 추출물이 있습니다.카운트 백분율을 표시하고 두 부울을 모두 계산하십시오.

| id | studentid | name | present | 
| 1 | 111  | John |  1 | 
| 2 | 222  | Kate |  0 | 
| 3 | 333  | Matt |  1 | 
| 4 | 111  | John |  0 | 
| 5 | 111  | John |  1 | 

나는 경우 예를 들어 studentid = 111 1 = 현재와 때 studentid = (111)와 현재 = 0 하지만 운동을 할 수없는이 두 가지를 말할 수를 할 수 있습니다.

i. 각각에 대해 별도의 계산을 수행하는 대신 하나의 계산 쿼리 만 수행 할 수 있습니까? 현재 내 두 개의 별도의 쿼리 내가 존재 = 1

| name | present | 
| John |  12 | 

studentid = (111)와 현재 = 0

| name | absent | 
| John |  4 | 

하지만 것 이상적으로 같은

를 예를 들어

studentid = (111)를 받고 오전에

| name | present | absent | 
| John |  12 |  4 | 

ii. 미만인 학생들을 만나고 싶습니다. 수업의 75 %. 그러나 나는이 기능을 구현하는 방법을 모르겠다.

답변

2

수업의 75 % 미만 적이 있었던 학생들을 나열하려면 :

SELECT 
    studentid, 
    name, 
    SUM(present) AS present, 
    SUM(present = 0) AS absent 
FROM your_table 
GROUP BY studentid, name 
HAVING present < .75 * (present+absent) 
+0

@ xdazz SQL 피들 및 쿼리에서 샘플 데이터를 사용하고 동일한 데이터를 기반으로하기 때문에 John이 2/3 (66 %)이기 때문에 시간이 75 % 미만이지만이 방법이 작동하는지 잘 모르겠습니다. 내가 달릴 때 케이트 만 나타나니? – ak85

+1

저의 작품 : http://sqlfiddle.com/#!2/7b2b1/4 – Barmar

1

당신은 아래와 같이 할 수있다 :

SELECT 
    studentid, 
    name, 
    SUM(present = 1) AS present, 
    SUM(present = 0) AS absent 
FROM your_table 
GROUP BY studentid, name 
+0

이 좋은 작품 질문의 첫 부분에 감사드립니다! – ak85

관련 문제