在MySQL中创建涉及三个表的报告

时间:2016-05-08 22:29:18

标签: mysql sql aggregate reporting

简而言之,我希望创建一个报告,显示客户列表(行),我们的服务位于顶部(列)。在每个单元格中,将有一个数字,表示对话类型'。我们的想法是让我们的销售人员能够看到 - 如果客户知道我们提供的特定服务,他们是否与其一起生活,如果他们已经尝试过并且讨厌它等等(这些是对话类型)。这是为了避免一遍又一遍地使用相同的信息轰炸客户。从本质上讲,它是销售团队可以用来在内部保持同一页面的工具。

以下是我的表格:

服务(id,service_name,description) 客户端(id,client_name) 对话(id,client_id,service_id,conversation_type_id) conversation_type(id,description)

到目前为止,这是我的问题:

SELECT 
company,
CASE WHEN service_name= 'A' THEN conversation_type_id END AS 'A', 
CASE WHEN service_name= 'B' THEN conversation_type_id END AS 'B',
CASE WHEN service_name= 'C' THEN conversation_type_id END AS 'C',
CASE WHEN service_name= 'D' THEN conversation_type_id END AS 'D' 
FROM 
services srv
INNER JOIN 
conversations con ON srv.id=con.service_id
INNER JOIN company cmp ON con.client_id=cmp.id
INNER JOIN conversation_type typ ON con.conversation_type_id=typ.id
GROUP BY company;

看起来很接近,但不是打印

----------------------------------------------
|          | A      | B      | C      | D     |
|client 1  | 1      | 2      | 1      | 5     |
|client 2  | 3      | 2      | 3      | 4     |
|client 3  | 1      | 5      | 1      | 1     |
-----------------------------------------------

反而打印

----------------------------------------------
|          | A      | B      | C      | D     |
|client 1  | 1      |        |        |       |
|client 1  |        | 2      |        |       |
|client 1  |        |        | 1      |       |
|client 1  |        |        |        |   5   |
-----------------------------------------------

我认为这是一个分组问题,但我已经尝试了各种各样的事情,但它似乎并不合适。有任何想法吗?真的,有更好的方法吗?非常感谢任何见解。谢谢。

1 个答案:

答案 0 :(得分:0)

你可以像草莓所说的那样把Max(案例......)放在每个案例中。或者你可以把每个案例放在一个查询然后加入它们,就像这样(第一个肯定更好):

In [63]: df /= df.iloc[0]/100

In [64]: df
Out[64]:
                  AAPL           F         IBM
Date
2016-05-02  100.000000  100.000000  100.000000
2016-05-03  101.644596   98.604993   99.215255
2016-05-04  100.587358   97.723935   99.297856
2016-05-05  100.179074   97.797357  100.826046
2016-05-06   99.620377   98.678414  102.368976