我正在尝试显示网站用户数据的“比例”字段,其中比例将是衡量某个数据源对其转化的贡献的量度(无论可能如何,都无关紧要)。

这是我希望通过SQL实现的输出:

Month  | ID | Country | Data Source |Proportion
Jan-15 | 1  | UK      |   GA        |    0.5
Jan-15 | 1  | UK      |   Omniture  |    0.5
Jan-15 | 2  | France  |   GA        |     1
Jan-15 | 3  | Germany |   GA        |    0.25
Jan-15 | 3  | Germany |   Omniture  |    0.25
Jan-15 | 3  | Germany |   Email     |    0.25
Jan-15 | 3  | Germany |   Moz       |    0.25
Feb-15 | 1  | UK      |   GA        |    0.5
Feb-15 | 1  | UK      |   Omniture  |    0.5
Feb-15 | 2  | France  |   Omniture  |    0.5
Feb-15 | 2  | France  |   GA        |    0.5
Feb-15 | 3  | Germany |   Omniture  |    0.33
Feb-15 | 3  | Germany |   Email     |    0.33
Feb-15 | 3  | Germany |   Moz       |    0.33
Mar-15 | 1  | UK      |   Omniture  |    0.5
Mar-15 | 1  | UK      |   GA        |    0.5
Mar-15 | 2  | France  |   Omniture  |    0.5
Mar-15 | 2  | France  |   Email     |    0.5


这是我目前正在使用且失败的SQL:

SELECT
    MONTH(registrationDate), country, DataSource, 1/COUNT(ID)
FROM
    data_table
WHERE
    registrationDate IS NOT NULL
GROUP BY
    MONTH(registrationDate), ID


这只是给出比例的一个实例。使用上面的示例,一月份ID为1的用户将只有一条记录,其比例为0.5。

在显示此比例值之间正确共享数据源方面的任何帮助将不胜感激!

最佳答案

您需要将结果与原始数据结合起来。这是使用JOIN的方法:

SELECT dt.*, ddt.value
FROM data_table dt JOIN
     (SELECT MONTH(registrationDate) as mon, ID,
             1.0/COUNT(applicantId) as value
      FROM data_table
      WHERE registrationDate IS NOT NULL
      GROUP BY MONTH(registrationDate), ID
     ) ddt
     ON ddt.id = dt.id AND
        ddt.mon = MONTH(dt.registrationDate);


您的问题中始终出现IDApplicationIdRegistrationId。我不确定要使用的正确列是什么。

编辑:

要包括年份(在所有情况下,这都是一个好主意):

SELECT dt.*, ddt.value
FROM data_table dt JOIN
     (SELECT YEAR(registrationDate) as yyyy, MONTH(registrationDate) as mon, ID,
             1.0/COUNT(applicantId) as value
      FROM data_table
      WHERE registrationDate IS NOT NULL
      GROUP BY YEAR(registrationDate), MONTH(registrationDate), ID
     ) ddt
     ON ddt.id = dt.id AND
        ddt.mon = MONTH(dt.registrationDate) AND
        ddt.yyyy = YEAR(dt.registrationDate);

关于mysql - SQL-通过除以另一个字段的频率而按比例输出的字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32070908/

10-13 07:52