0

各顧客の名前と、それぞれが持っているさまざまな種類のアカウントの数を取得するクエリを作成しようとすると、多くの問題が発生します。3 つのタイプは、当座預金、普通預金、および CD です。

customers:
+--------+--------+
| cid    | name   |
+--------+--------+
| 1      | a      | 
| 2      | b      |
| 3      | c      |
+--------+--------+

accounts:
+-----------+-----------+
| aid       | type      |
+-----------+-----------+
| 1         | Checkings |
| 2         | Savings   |
| 3         | Checkings |
| 4         | CD        |
| 5         | CD        |
| 6         | Checkings |
+-----------+-----------+

transactions:
+--------+--------+--------+
| tid    | cid    | aid    |
+--------+--------+--------+
| 1      | 1      | 1      |
| 2      | 1      | 2      |
| 3      | 2      | 3      |
| 4      | 3      | 4      |
| 5      | 1      | 5      |
| 6      | 3      | 4      |
| 7      | 1      | 6      |
+--------+--------+--------+

予想される答えは次のとおりです。

あ、3

イ、1

c、1

名前を取得するのは簡単ですが、各個人のアカウントを数えて、アカウントを比較して同じタイプではないことを確認するにはどうすればよいですか?

4

2 に答える 2

1

DISTINCTの中に追加するだけですCOUNT

SELECT  a.cid, a.name, COUNT(DISTINCT c.type) totalCount
FROM    customers a
        INNER JOIN transactions b
            ON a.cis = b.cid
        INNER JOIN accounts c
            ON b,aid = c.aid
GROUP BY a.cid, a.name
于 2012-11-19T02:06:02.397 に答える
0

クエリ:

SQLFiddle例

SELECT 
a."name", 
COUNT(DISTINCT c."type") totalCount
FROM    customers a
        INNER JOIN transactions b
            ON a."cid" = b."cid"
        INNER JOIN accounts c
            ON b."aid" = c."aid"
GROUP BY a."cid", a."name"
ORDER BY totalCount DESC

結果:

| NAME | TOTALCOUNT |
---------------------
|    a |          3 |
|    b |          1 |
|    c |          1 |
于 2012-11-19T09:32:47.107 に答える