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ı: 4)
prtkl, 09-03-2010 tarihinden beri AccessTr.neT üyesidir
Cevapla
Çözüldü #2
Aşağıdaki kodu modüle kaydet

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

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