2013-12-10 13 views

cevap

7

Böyle bir şey - Doğru olanı sayıyorsanız emin olun (JOIN bir OUTER geçmek durumunda) ama ...

SELECT MovieID 
     , COUNT(*) ttl 
    FROM download x 
    JOIN download y 
    ON y.userid = x.userid 
    AND y.movieid = 995 
    GROUP 
    BY x.MovieID 
    ORDER 
    BY ttl DESC; 
+2

Tarihinizden birçok sorgu gördüm ve OP ile hedefe gayet güzel geldim. Sadece dezavantaj, belki de gelecek için, kullanıcı için genişlerler. NEDEN işlerin belli bir şekilde işlediğini ve başkalarına yardım edeceklerini ve böylece başkalarına yardım edeceğini ve böylece sadece kesmeyi/yapışmayı nasıl yapacağını öğrenecekler ... Sadece yapıcı eleştiriler, ama yine, sen gönderilerle hedefte. – DRapp

+0

Evet, adil yorum. – Strawberry

-2

filtre movieId..you üzerinde doğrudan

SELECT `MovieID`, COUNT(*) AS `Count` 
FROM `download` 
WHERE `UserID` IN (
SELECT `UserID` FROM `download` 
    WHERE `MovieID` = 995 
) 
GROUP BY `MovieID` 
ORDER BY `Count` DESC 

sayesinde alt sorgu eklemek gerekmez. Bu, movieID = 995 maddesinin kullanıldığı yerde yapılabilir.

SELECT `MovieID`, COUNT(*) AS `Count` 
FROM `download` 
WHERE `MovieID` = 995 
GROUP BY `MovieID` 
ORDER BY `Count` DESC 
+1

Bu orijinal sorguya eşdeğer değildir. Belirli bir filmi indiren herhangi bir kullanıcının tüm filmlerini soruyor. – YXD

+0

Neden? Bu doğru –

+0

Bu sorgu, sonuç kümesinde yalnızca tek bir MovieID (995) içerecektir. Orijinal sorguda olan şey bu değil. – YXD

0

Kullanım Exists yerine, Optimizing Subqueries with EXISTS Strategy bkz: MySQL dışından için”sorguları değerlendirir

IN outer_expr (subquery_where NEREDEN ... inner_expr SEÇ):

aşağıdaki alt sorgu karşılaştırma düşünün İçerisinde. ”Yani, ilk olarak dış ifade dış_expr öğesinin değerini alır ve alt sorgusunu çalıştırır ve ürettiği satırları yakalar.

Çok yararlı bir en iyileştirme alt sorgusu, yalnızca ilgi satırlarının inner_expr öğesinin dış_yastk'ye eşit olan içersindekiler olduğunu bildirmesidir. Bu, uygun bir eşitliğini alt sorgunun WHERE maddesine indirerek yapılır. Bu karşılaştırma bu dönüştürülür gibidir:

MEVCUT

(SELECT 1 ... im subquery_where ve outer_expr = inner_expr) dönüştürmeden sonra, MySQL satır sayısını sınırlamak için itilmiş aşağı eşitliği kullanarak alt sorguyu değerlendirirken incelemelidir.

+0

bunu yazarak sorguyu açıklayabilirsiniz. Benim için hala çok kafa karıştırıcı –

İlgili konular