簡體   English   中英

計算mySQL中每一行的出現次數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM