如何在MySQL中连续计算列中的值

时间:2018-02-12 19:14:10

标签: mysql sql vb.net

如何计算表中一行中的所有列? 我在查询时遇到问题,我真的需要帮助。 有人帮助我。

我的表看起来像这样;

jhsf2

+-----------------------------------------+
|Stud_ID|M1|T1|W1|TH1|F1|M2|T2|W2|TH2|F2| 
|1022234|  |P |P |P  |P |A |P |P | P | P|
|1045978|  |P |P |P  |P |P |P |P | P | P|
+---------------------------------------+

如果我有查询要这样做,我想要这样的结果。 我想从M1到F2计算一个值不是Null,它就是这样的。

jhsf2

+-----------------------------------------------+
|Stud_ID|Count(M1,T1,W1,TH1,F1,M2,T2,W2,TH2,F2) |
|1022234|                  9                    |
+-----------------------------------------------+

或者我想在mysql中使用WHERE查询,我不知道查询,但就像这样。

Select Stud_ID,M1,T1,W1,TH1,F1,M2,T2,W2,TH2 from jhsf2 
WHERE Stud_ID = "131418100008" 
and M1,T1,W1,TH1,F1,M2,T2,W2,TH2 T2, = "P"


+-----------------------------------------------+
|Stud_ID|Count(M1,T1,W1,TH1,F1,M2,T2,W2,TH2,F)  |
|1022234|                  8                    |
+-----------------------------------------------+

3 个答案:

答案 0 :(得分:1)

在MySQL中,您可以通过添加布尔值来计算值:

select stud_id,
       ( (m1 = 'P') + (m2 = 'P') + . . .
       ) as cnt
from jhsf2;

注意:拥有多个基本上包含数组的列在SQL中不是一个好的数据结构。通常,您需要每stud_id行和列值一行。

答案 1 :(得分:0)

您可以通过检查非空值和星号(全部)

来尝试此操作
        Select count(*) from     
         jhsf2 WHERE Stud_ID !=null and M1!=null and ..
         .......

..........休息所有想要检查它的值是否正常的列。

答案 2 :(得分:0)

我不够聪明,无法创建一个选择来完成这项工作,但你可以在代码中完成。 我猜测学生证的数据类型为Long。如果是其他原因,请调整代码。

Private Sub GetCount()
        Dim dictStudents As New Dictionary(Of Long, Integer)
        Dim itgNonNullCount As Integer = 0
        Dim strQuery As String = "Select * from jhsf2"
        Using cn As New MySqlConnection("your connection string")
            Using cmd As New MySqlCommand With {
                    .Connection = cn,
                    .CommandType = CommandType.Text,
                    .CommandText = strQuery}
                cn.Open()
                Using dr As MySqlDataReader = cmd.ExecuteReader
                    If dr.HasRows Then
                        While dr.Read
                            'Loop through each column
                            For i As Integer = 1 To 10 'number of columns -1
                                If dr.GetValue(i) IsNot DBNull.Value Then
                                    itgNonNullCount += 1
                                End If
                            Next
                            'Add the student ID and count to the dictionary
                            dictStudents.Add(dr.GetInt64(0), itgNonNullCount)
                            'reset the count back to zero for the next record
                            itgNonNullCount = 0
                        End While
                    End If
                End Using
            End Using
        End Using
    End Sub