[英]Count occurrences across each row in mySQL
我一直在思考如何計算每行中出現一個字符串的頻率,並最終更新另一列。
如果我有一個問題表,其中包含發起人的記錄中每個問題的答案:
+-------------+-----+-----+-----+-----+-----+ | 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應用程序。 如果不可能的話,有沒有辦法我可以重新排列這些數據以獲得最終結果。
謝謝!
您可以使用以下更新查詢:
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 )。 對於新行,您可以在應用程序本身中編寫一些內容,以在插入行之前計算這些值。
在此為您查詢孔:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.