查找每个客户的帐户类型数量

时间:2012-11-19 02:02:25

标签: sql oracle sqlplus

我在尝试构建一个查询时会遇到很多麻烦,该查询会告诉我每个客户的名称以及每个客户的不同类型帐户的数量。这三种类型是Checkings,Savings和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      |
+--------+--------+--------+

预期的答案是:

a,3

b,1

c,1

获取名称很简单,但我如何记录每个人的帐户以及比较帐户以确保它们不是同一类型?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

查询:

SQLFiddleExample

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 |