2016-04-01 9 views
0

Sorumu, aşağıdaki vurgulanan/kalın soruyu doğru bir şekilde SQL sorgusu yazmaktır. Doktor hours.Table "Ad", "Soyadı", "Tarih" alanlar aşağıdaki etti çalışma depolayan HMO veritabanındaki bir tablo, "HoursWorked" OradaGünlük iş yeri etkinlikleri için SQL bilgisini uygulama

. Joe Doe adında bir doktor için Ocak-Mart dönemi için ortalama çalışma saatlerini alır bir sql bildirimi yazmak. Bu bir ev ödevi soru gibi sesler

şimdiye kadar ben

SELECT HoursWorked 
FROM Table 
WHERE DATE = (January - March) AND 
SELECT AVG(HoursWorked) FROM Table WHERE FirstName="Joe",LastName="Doe"* 
+0

evet hiç doğru almamış bir quizz soruydu ama o belirli bir çalışan için belirli bir tarih grubundan (Ocak - Mart) ortalama HoursWorked bulmak için merak ediyordum. yani Joe Doe'nin vakasında, ocak tarihleri ​​arasında çalıştığı ortalama saatleri bulmak istedim. Hesaplamanın sözdizimi, ne anlayamadığım. – Chie

cevap

1

Birkaç işaretçiler var (biz sizin için burada cevap yok, ama size biraz rehberlik etmeyi deneyebilirsiniz).

İlk önce seçiminizden dönmek istediğiniz her şeyi koymak ve en sonunda tüm arama koşullarınıza sahip olmak istiyorsunuz.

Yani genel biçim olacaktır:

SELECT Column1, 
     Column2, 
     Column3, 
    FROM YourTable 
    WHERE Column4 = Restriction1 
     AND Column5 = Restriction2 

düşünmek gereken bir sonraki şey tarihleri ​​veritabanı tablosunda biçimlendirilir nasıl. Umarım bir tarih veya saat sütununda tutulurlar (seçenekler kullandığınız veritabanı motoruna, örneğin, Microsoft SQL Server, Oracle veya MySql). Gerçekte, insanların kullandığı bazı eski veritabanları, bu türden çok daha zor hale getiren her türlü formatta saklayabilirler, fakat bu bir ev ödevi türü sorusu olduğunu varsaydığımdan, bir tarih-saat formatı olduğunu varsayalım.

Sen bir değere sütunları karşılaştırarak kısıtlamaları belirtmek, bu yüzden tarih Mart 2012 2. gece yarısından sonra oldu tüm satırları isteseydi, sen NEREDE maddesini olurdu:

WHERE MyDateColumn >= '2012-03-02 00:00:00' 

Not o karışıklığı önlemek, genellikle "Yıl-Ay-Gün Saat: Dakika: Saniye" olarak tarihleri ​​biçimlendirmek için deneyin. Bunun nedeni, farklı ülkelerde tarihlerin çoğunlukla farklı formatlarda yazılmalarıdır ve bu, her yerde (en azından bilgisayarlar tarafından) anlaşılan bir Evrensel biçim olarak kabul edilir.

Bu nedenle, WHERE'nizde bu karşılaştırmaların bir çiftini birleştirmek isteyeceksiniz, bir tarihte belirli bir tarihin ardından VEYA bir tarihin başka bir noktasından önceki tarihler için.

Bunu bir ziyaret edip nereye gittiğinizi görüyorsanız, ilerlemenizle ilgili sorunuzu güncelleyin ve sorun yaşarsanız birisinin işinizi bitirmesine yardımcı olabilirsiniz.http://sqlfiddle.com/

Zaten cevap

SELECT AVG(HoursWorked) FROM Table WHERE FirstName="Joe",LastName="Doe"* 

yazdım

0

sadece düzeltmek gerekir: Eğer gerçek bir veritabanına erişimi olan ve söz dizimi deneme gerekmiyorsa

, bu siteyi deneyin sorgu

SELECT AVG(HoursWorked) as AVGWORKED FROM Table WHERE FirstName='Joe' AND LastName='Doe' 

O sorgu verecektir ortalama saat takdirde ancak yalnızca bir sonraki "AND" add bir süre arasına almak gerekir Joe Doe için çalıştı Yeni bir Tarih oluşturmak için yerleşik bir fonksiyonu DateFromParts (yıl, ay, gün) kullanabilirsiniz SQL sunucusu kullanıyorsanız veya başka bir Veritabanı Altyapısı kullanıyorsanız, bir DateColumn Convert (Tarih, 'MM/dd'ye bir dize dönüştürebilirsiniz)/yyyy ")

Örnek örnekte

SELECT AVG(HoursWorked) as AVGWORKED FROM Table WHERE FirstName='Joe' AND LastName='Doe' AND DateColumn between DateFromParts(year,month,day) and Convert(Date,'MM/dd/yyyy') 

i) her iki yaklaşımı göstermektedir (ilk tarih datefromparts ve (tarih dönüştürmek) bitiş tarihi için.

İlgili konular