计算mySQL

时间:2016-11-20 19:55:59

标签: mysql database

我一直在思考如何计算字符串在每行中出现的频率,并最终更新另一列。

如果我的问题表包含赞助商对记录中每个问题的答案:

+-------------+-----+-----+-----+-----+-----+
| response_id | q1  | q2  | q3  | q4  | q5  |
+-------------+-----+-----+-----+-----+-----+
|           1 | Yes | N/A | Yes | No  | Yes |
|           2 | No  | Yes | No  | Yes | N/A |
|           3 | Yes | No  | No  | N/A | Yes |
+-------------+-----+-----+-----+-----+-----+

是否可以这样做:

+-------------+-----+-----+-----+-----+-----+-----+----+-----+
| response_id | q1  | q2  | q3  | q4  | q5  | Yes | No | N/A |
+-------------+-----+-----+-----+-----+-----+-----+----+-----+
|           1 | Yes | N/A | Yes | No  | Yes |   2 |  1 |   1 |
|           2 | No  | Yes | No  | Yes | N/A |   2 |  1 |   1 |
|           3 | Yes | No  | No  | N/A | Yes |   1 |  1 |   2 |
+-------------+-----+-----+-----+-----+-----+-----+----+-----+

我将此数据从csv导入Laravel应用程序。如果不可能,有没有办法可以重新排列这些数据以达到最终结果。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用如下所示的更新查询:

update responses set Yes = IF(q1='Yes',1,0) 
        + IF(q2='Yes',1,0)
        + IF(q3='Yes',1,0)
        + IF(q4='Yes',1,0)
        + IF(q5='Yes',1,0);

这将更新现有行(此处 SQL Fiddle )。对于新行,您可以在应用程序本身中编写一些内容,以便在插入行之前计算这些值。

答案 1 :(得分:0)

这里是您的洞穴查询:

SELECT
     response_id
    ,q1,q2,q3,q4,q5
    , IF ( q1 = 'Yes', 1,0)+IF ( q2 = 'Yes', 1,0)+IF ( q3 = 'Yes', 1,0)+IF ( q4 = 'Yes', 1,0)+IF ( q5 = 'Yes', 1,0)  AS `Yes`
    , IF ( q1 = 'No', 1,0)+IF ( q2 = 'No', 1,0)+IF ( q3 = 'No', 1,0)+IF ( q4 = 'No', 1,0)+IF ( q5 = 'No', 1,0)  AS `No`
    , IF ( q1 = 'N/A', 1,0)+IF ( q2 = 'N/A', 1,0)+IF ( q3 = 'N/A', 1,0)+IF ( q4 = 'N/A', 1,0)+IF ( q5 = 'N/A', 1,0)  AS `N/A`
FROM my_table;