0

私はこの単純な(非実用的な)テーブルを持っています

STUDENTID   SERVICE
1           a         
1           b         
1           c         
1           d         
1           e         
2           a         
2           b         
2           c         
2           d          
2           e         
3           a          
3           b         
3           c         
4           a         
4           f         
5           a         
5           d         
6           f         
6           g         
7           a         
7           b         
7           c         
7           d         
7           e         
8           a         
8           b         
8           c         
8           d         
8           e       

たとえば、特定の情報を表にしたいと思います。

サービス「a」とサービス「b」だけで登録した学生の数。
サービス「a」とサービス「c」だけで登録した学生の数。
サービス「a」とサービス「d」だけで登録した学生の数。等

また

サービス「a」と「a」以外のサービスに登録した学生の数。
サービス「b」と「b」以外の2つのサービスにサインアップした学生の数。

サービスの数は将来変更される可能性がありますが、今のところは問題ありません。

これは私が今持っているものであり、それは機能していません。

--およびその他のサービスにサインアップした学生の数を返したい

select COUNT(STUDENTID), service from table 
group by service where service = 'a' and studentid in 
(select studentid from table group by STUDENTID having COUNT(service) = 2) 
4

3 に答える 3

2

ここにあなたの質問に関するいくつかのヒントがあります。

サービス「a」とサービス「b」だけで登録した学生の数。

SELECT COUNT(*)
FROM
(
    SELECT studentID
    FROM   tableName
    WHERE  Service IN ('A', 'B')
    GROUP BY StudentID
    HAVING COUNT(studentID) = 2
) a

サービス「a」とサービス「c」だけで登録した学生の数。

SELECT COUNT(*)
FROM
(
    SELECT studentID
    FROM   tableName
    WHERE  Service IN ('A', 'C')
    GROUP BY StudentID
    HAVING COUNT(studentID) = 2
) a
于 2012-08-22T15:55:47.663 に答える
0

どうですか:

select COUNT(t.STUDENTID)
from 
(select studentid, service  from table group by STUDENTID having COUNT(service) = 2) as t
WHERE t.service = 'a'
于 2012-08-22T15:42:32.053 に答える
0

自己参加できます

SELECT COUNT(DISTINCT studentid) n
FROM      table t1
LEFT JOIN table t2 on (t1.studentid = t2.studentid)
WHERE t1.service = 'a' AND t2.service <> 'a'

またはあなたが学生を知りたいなら...

SELECT studentid, SUM(IF(service = 'a',1,0)) n_a, SUM(IF(service = 'a',0,1)) n_other
FROM table
GROUP BY studentid
HAVING n_a = 1 AND n_other >= 1
于 2012-08-22T15:46:20.477 に答える