กระทู้เก่าบอร์ด อ.Yeadram
3,763 8
URL.หัวข้อ /
URL
หาค่า Median
ผมมี ข้อมุลยอดซื้อของลูกค้า ตาม order อยู่แต่อยากหาค่า Median ของยอดซื้อของลูกค้าครับ ไม่ทราบว่าต้องทำอย่างไรบ้าง เพราะหา function ไม่เจอ
รูปแบบข้อมูลที่มีจะเป็น
Cust_ID = txt
INV_ID =txt
Sales AMT = double
ขอบคุณล่วงหน้าครับ
รูปแบบข้อมูลที่มีจะเป็น
Cust_ID = txt
INV_ID =txt
Sales AMT = double
ขอบคุณล่วงหน้าครับ
8 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R11351
ค่า Median เป็นค่าทางคณิตศาสตร์คือค่าที่อยู่ตรงกลางของจำนวนข้อมูลทั้งหมด
มี 2 กรณีคือ
1. จำนวนข้อมูลเป็นจำนวนคี่ เช่น 1,2,4,6,17,20,15 (7จำนวน) ค่าที่อยู่ตรงกลาง (Median) คือลำดับที่ 4 ซึ่งก็คือ 6 (ต้องนำข้อมูลมาเรียงลำดับก่อน จากน้อยไปมากหรือมากไปน้อยก็ได้)
2. จำนวนข้อมูลเป็นจำนวนคู่เช่น 1,3,4,8,12,16,18,24,36,100 (10จำนวน) ในกรณีนี้ ค่าที่อยู่ตรงกลาง (Median) คือค่าเฉลี่ยของเลขที่ลำดับคู่กลาง นั่นคือลำดับที่ 5 และ 6 = (12+16)/2 =14
เพราะฉนั้นคงต้องเขียน Function ขึ้นมาใช้เอง ผมเชื่อว่าในนี้หลายท่านมีความสามารถครับ
มี 2 กรณีคือ
1. จำนวนข้อมูลเป็นจำนวนคี่ เช่น 1,2,4,6,17,20,15 (7จำนวน) ค่าที่อยู่ตรงกลาง (Median) คือลำดับที่ 4 ซึ่งก็คือ 6 (ต้องนำข้อมูลมาเรียงลำดับก่อน จากน้อยไปมากหรือมากไปน้อยก็ได้)
2. จำนวนข้อมูลเป็นจำนวนคู่เช่น 1,3,4,8,12,16,18,24,36,100 (10จำนวน) ในกรณีนี้ ค่าที่อยู่ตรงกลาง (Median) คือค่าเฉลี่ยของเลขที่ลำดับคู่กลาง นั่นคือลำดับที่ 5 และ 6 = (12+16)/2 =14
เพราะฉนั้นคงต้องเขียน Function ขึ้นมาใช้เอง ผมเชื่อว่าในนี้หลายท่านมีความสามารถครับ
3 @R11355
พยายามจะเขียนเป็น SQL statement เดียวครับ แต่ยังคิดไม่ออก เอาแบบ code ยาวๆ ไปก่อนนะครับ
ถ้าต้องการเงื่อนไขต่างๆ ก็เติม where เข้าไปนะครับ
Public Function Median()
dblResult = 0
Set rsCount = CurrentDb.OpenRecordset("Select Count(*) From SalesOrder", dbOpenSnapshot, dbReadOnly)
sngCount = rsCount(0)
Set rsCount = Nothing
If ((sngCount) Mod 2) = 0 Then
'Get 2 mid value
strSQL = "Select Max(SaleAmount) From (Select Top " & (sngCount / 2) & " SaleAmount From Item SalesOrder By SaleAmount)"
Set rsValue = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot, dbReadOnly)
Value1 = rsValue(0)
rsValue = Nothing
strSQL = "Select Max(SaleAmount) From (Select Top " & (sngCount / 2) + 1 & " SaleAmount From SalesOrder Order By SaleAmount)"
Set rsValue = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot, dbReadOnly)
Value2 = rsValue(0)
rsValue = Nothing
dblResult = (Value1 + Value2) / 2
Else
'Get 1 mid value
strSQL = "Select Max(SaleAmount) From (Select Top " & (sngCount - 1) / 2 & " SaleAmount From Item SalesOrder By SaleAmount)"
Set rsValue = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot, dbReadOnly)
dblResult = rsValue(0)
rsValue = Nothing
End If
MedianItem = dblResult
End Function
ถ้าต้องการคำอธิบาย ก็ถามมาละกันครับ
ถ้าต้องการเงื่อนไขต่างๆ ก็เติม where เข้าไปนะครับ
Public Function Median()
dblResult = 0
Set rsCount = CurrentDb.OpenRecordset("Select Count(*) From SalesOrder", dbOpenSnapshot, dbReadOnly)
sngCount = rsCount(0)
Set rsCount = Nothing
If ((sngCount) Mod 2) = 0 Then
'Get 2 mid value
strSQL = "Select Max(SaleAmount) From (Select Top " & (sngCount / 2) & " SaleAmount From Item SalesOrder By SaleAmount)"
Set rsValue = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot, dbReadOnly)
Value1 = rsValue(0)
rsValue = Nothing
strSQL = "Select Max(SaleAmount) From (Select Top " & (sngCount / 2) + 1 & " SaleAmount From SalesOrder Order By SaleAmount)"
Set rsValue = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot, dbReadOnly)
Value2 = rsValue(0)
rsValue = Nothing
dblResult = (Value1 + Value2) / 2
Else
'Get 1 mid value
strSQL = "Select Max(SaleAmount) From (Select Top " & (sngCount - 1) / 2 & " SaleAmount From Item SalesOrder By SaleAmount)"
Set rsValue = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot, dbReadOnly)
dblResult = rsValue(0)
rsValue = Nothing
End If
MedianItem = dblResult
End Function
ถ้าต้องการคำอธิบาย ก็ถามมาละกันครับ
4 @R11356
Search จาก InterNet แล้วครับ
ได้มา 2 ที่ เขียนสั้นกว่าของผม
http://bytes.com/topic/access/answers/608740-how-write-code-median
http://www.fabalou.com/Access/Modules/recordset_median.asp
ลองเลือกใช้ดูครับ
ว่าแต่ทำไมไม่ลอง search ดูก่อนล่ะครับ?
(ผมทำไปเพื่อลับสมอง แล้วคุณล่ะ?)
ได้มา 2 ที่ เขียนสั้นกว่าของผม
http://bytes.com/topic/access/answers/608740-how-write-code-median
http://www.fabalou.com/Access/Modules/recordset_median.asp
ลองเลือกใช้ดูครับ
ว่าแต่ทำไมไม่ลอง search ดูก่อนล่ะครับ?
(ผมทำไปเพื่อลับสมอง แล้วคุณล่ะ?)
5 @R11361
ขอบคุณมากครับ ผมลอง search ดูแล้วครับ แต่ไม่เจอตัวที่ใช่ เนื่องจากค่า Median ที่ต้องการจะเป็นค่า Median ของยอดซื้อของแต่ละลุกค้าแต่ละคน โดยมี Cust_ID เป็นตัวกำหนด
6 @R11362
รบกวนถามคุณ Pichai TC ครับ
เท่าที่ลองดูจากที่คุณ Pichai เขียนให้ และตาม Link น่าจะป็นการหาค่า Median ของลูกค้าทั้งหมดไม่ใช่รายคนตาม Cust ID ใช่ไหมครับ ?
เท่าที่ลองดูจากที่คุณ Pichai เขียนให้ และตาม Link น่าจะป็นการหาค่า Median ของลูกค้าทั้งหมดไม่ใช่รายคนตาม Cust ID ใช่ไหมครับ ?
7 @R11366
R11355 ถ้าต้องการเงื่อนไขต่างๆ ก็เติม where เข้าไปนะครับ
Select Count(*) From SalesOrder Where CustID = "xxx"
Select Max(SaleAmount)
From (Select Top " & (sngCount / 2) & " SaleAmount
From SalesOrder
Where CustID = "xxx"
Order By SaleAmount)
Select Count(*) From SalesOrder Where CustID = "xxx"
Select Max(SaleAmount)
From (Select Top " & (sngCount / 2) & " SaleAmount
From SalesOrder
Where CustID = "xxx"
Order By SaleAmount)
8 @R11371
ขอบคุณครับ ขอเวลาศึกษาดูก่อน ผมไม่เคยใช้ VB เหมือนกัน
Time: 0.3825s
Median หมายถึงอะไรครับ?