我一直在思考如何计算字符串在每行中出现的频率,并最终更新另一列。
如果我的问题表包含赞助商对记录中每个问题的答案:
+-------------+-----+-----+-----+-----+-----+ | 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应用程序。如果不可能,有没有办法可以重新排列这些数据以达到最终结果。
谢谢!
答案 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;