/ / MySQL select Prozentsatz - mysql, sql

MySQL select Prozentsatz - mysql, sql

Ich habe eine Datenbanktabelle "tblfavs" mit fünf Spalten: id, userid, logoid, favdate, did.

Ich möchte den Prozentsatz der Favoriten (id) eines Benutzers (userid) ermitteln, die die gleiche Designer-ID teilen (did), und wo userid <> did, vom höchsten zum niedrigsten Prozentsatz angezeigt wird.

Im Pseudo-Abfrage-Format:

SELECT [percentage], userid, did
FROM tblfavs
WHERE record has the same userid and did
AND userid <> did
GROUP BY userid
ORDER BY [percentage] DESC

Ich kann die Abfrage nicht verstehen, um das zu erreichen. Hilfe geschätzt!

Bearbeiten:

Beispieldaten

1, 1, 5, 2017-01-01, 2
2, 7, 3, 2017-01-02, 5
3, 1, 8, 2017-01-02, 2
4, 7, 1, 2017-01-02, 3

In diesem Set hat Benutzer 1 (zweite Spalte) zwei Einträge und beide haben "2" als Designer-ID (letzte Spalte).

Erwartete Ausgabe

100%, userid 1, did 2
50%, userid 7, did 5
50%, userid 7, did 3
etc.

Antworten:

3 für die Antwort № 1

Dies ist in anderen DBMS, die Fensterfunktionen aufweisen (z.B. COUNT OVER). Dies ist jedoch in MySQL auch nicht so schwierig. Sie benötigen nur zwei Aggregationen: Anzahl pro userid und did, zählen per userid, Teilen.

select
ud.cnt * 100.0 / u.cnt as percentage,
ud.userid,
ud.did
from
(
select userid, did, count(*) as cnt
from tblfavs
group by userid, did
) ud
join
(
select userid, count(*) as cnt
from tblfavs
group by userid
) u on u.userid = ud.userid
order by percentage desc;

-1 für die Antwort № 2

Probieren Sie dies aus (im Vergleich zur vorherigen Antwort, um die genaue Eingabe zu erhalten - so erhalten Sie% für jede Zeile, die nicht aggregiert ist)

select
ud.cnt2 * 100.0 / u.cnt as percentage,
ud.userid,
ud.did
from
(
select
out3.userid,out3.did, cnt2
from
(select userid,did from tblfavs) out3
join
(
select
userid, did, count(*) as cnt2
from tblfavs
group by userid, did
) ud on ud.userid = out3.userid and ud.did = out3.did
) ud
join
(
select userid, count(*) as cnt
from tblfavs
group by userid
) u on u.userid = ud.userid
order by percentage desc;