Bendrai tai...
Hm, jeigu tau reikia būtent pagal tokią logiką skaičiuot ir nėra kito būdo, tai manyčiau, kad taip pat reikia suskaičiuot žmonių su vienodu tašku skaičiumi ir tą žmonių skaičių pridėt, atimus iš viso besikartojančių skaičių. Pvz.:
Vardas / Taškai
Pirmas 5
Antras 28
Trecias 28
Ketvirtas 9
Penktas 35
Sestas 14
Visus išrikevę gauname:
1. Pirmas
2. Ketvirtas
3. Sestas
4. Antras
5. Trecias
6. Penktas
Norime gauti pvz 'Penktas' rank'ą. Pagal tavo užklausą gautume 5, nors iš tikrųjų jis yra 6. Pataisymas būtų:
Gauname žmones, kurių taškų skaičius yra vienodas, bet mažesnis negu mum reikiamo žmogaus (šiuo atveju 'Penktas').
Kodas: [Pasirinkti]
SELECT COUNT(*) AS kartojasi
FROM people
WHERE taskai IN (SELECT DISTINCT taskai FROM people AS A, people AS B WHERE A.taskai = B.taskai)
Gauname kiek zmoniu turi besikartojantį taškų skaičių:
Kodas: [Pasirinkti]
SELECT COUNT(*) AS zm1 FROM people AS A, people AS B WHERE a.taskai = B.taskai
Dabar prie skaičiaus, gauto pagal tavo algoritmą reik pridėti `kartojasi` ir atimti `zm1`, jeigu aišku teisingai čia parašiau. Netikrinau, tai gal kokių klaidų pridariau. Jeigu nesigauna sujungti užklausas į vieną, tai visada galima duomenis gaut per kelias. Pagavai pačią idėją?
P.S. Tik idomu kas bus, kai bandysi paimti ranką būtent to žmogaus, kurio taškų skaičius kartojasi su kuo nors dar. Čia reikia viską labai smulkiai apmąstyt, jeigu nori bug'ų nepalikt. Kaip minimum, dar tavo tą griežtą nelygybę reik pakeist į >=. Šiaip pagalvok gal yra koks kitas būdas tą apskaičiuot


