Skip to main content

AccessTr.neT


Sorguyla medyanı bulmak

Sorguyla medyanı bulmak

Çözüldü #1
merhabala,

ekteki sorguda medyanı (ortanca) nasıl bulacağımın yolunu gösterebilirmisiniz?

SELECT Med(Tablo1.SAYI) AS SAYI_Medyan FROM Tablo1;

denedim ancak kabul etmedi.
merhabalar,

ekteki sorguda medyanı (ortanca) nasıl bulacağımın yolunu gösterebilirmisiniz?

SELECT Med(Tablo1.SAYI) AS SAYI_Medyan FROM Tablo1;

denedim ancak kabul etmedi.
.rar vt1.rar (Dosya Boyutu: 7,58 KB | İndirme Sayısı: 3)
prtkl, 09-03-2010 tarihinden beri AccessTr.neT üyesidir
Cevapla
Çözüldü #2
Aşağıdaki kodu modüle kaydet

Visual Basic Code
Public Function DMedian( _
 ByVal strField As String, ByVal strDomain As String, _
 Optional ByVal strCriteria As String) As Variant
    Dim db As DAO.Database
    Dim rstDomain As DAO.Recordset
    Dim strSQL As String
    Dim varMedian As Variant
    Dim intFieldType As Integer
    Dim intRecords As Integer
    
    Const errAppTypeError = 3169
    
    On Error GoTo HandleErr

    Set db = CurrentDb()
    
 
    varMedian = Null
    

    strSQL = "SELECT " & strField & " FROM " & strDomain
    

    If Len(strCriteria) > 0 Then
        strSQL = strSQL & " WHERE " & strCriteria
    End If
    
    strSQL = strSQL & " ORDER BY " & strField
    
    Set rstDomain = db.OpenRecordset(strSQL, dbOpenSnapshot)
    

    intFieldType = rstDomain.Fields(strField).Type
    Select Case intFieldType
    Case dbByte, dbInteger, dbLong, _
      dbCurrency, dbSingle, dbDouble, dbDate

        If Not rstDomain.EOF Then
            rstDomain.MoveLast
            intRecords = rstDomain.RecordCount

            rstDomain.MoveFirst
    
            If (intRecords Mod 2) = 0 Then

                rstDomain.Move ((intRecords \ 2) - 1)
                varMedian = rstDomain.Fields(strField)

                rstDomain.MoveNext

                varMedian = _
                  (varMedian + rstDomain.Fields(strField)) / 2

                If intFieldType = dbDate And Not IsNull(varMedian) Then
                    varMedian = CDate(varMedian)
                End If
            Else

                rstDomain.Move ((intRecords \ 2))
                varMedian = rstDomain.Fields(strField)
            End If
        Else

            varMedian = Null
        End If
    Case Else

        Err.Raise errAppTypeError
    End Select

    DMedian = varMedian
    
ExitHere:
    On Error Resume Next
    rstDomain.Close
    Set rstDomain = Nothing
    Exit Function

HandleErr:

    DMedian = CVErr(Err.Number)
    Resume ExitHere
End Function

Sorguya alana aşağıdaki gibi alan ekle

Visual Basic Code
Medyan: Dmedian("[SAYI]";"Tablo1")
Cevapla
Çözüldü #3
Çok teşekkür ederim,

Böyle bir modülü yazabilmek için Sql mi bilmek gerekiyor?
prtkl, 09-03-2010 tarihinden beri AccessTr.neT üyesidir
Cevapla
#4
Tablodaki değilde başka bir sorgudaki verilerin medyanını almak için bir ipucu var mı?
denedim ancak hata verdi.
prtkl, 09-03-2010 tarihinden beri AccessTr.neT üyesidir
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task