SQL: Zwracanie najbardziej powszechnej wartości dla każdej osoby
EDYCJA: Używam MySQL, znalazłem inny post z tym samym pytaniem, ale jest w Postgres; Potrzebuję MySQL.
Uzyskaj najczęstszą wartość dla każdej wartości innej kolumny w SQL
Zadaję to pytanie po dokładnym przeszukiwaniu tej strony i innych, ale nie znalazłem wyniku, który działa tak, jak zamierzam.
Mam tabelę osób (recordid, personid, transactionid) i tabelę transakcji (transactionid, rating). Potrzebuję pojedynczej instrukcji SQL, która może zwrócić najbardziej powszechną ocenę, jaką ma każda osoba.
Obecnie mam tę instrukcję SQL, która zwraca najbardziej powszechną ocenę dla określonego identyfikatora osoby. Działa i może może pomóc innym.
SELECT transactionTable.rating as MostCommonRating
FROM personTable, transactionTable
WHERE personTable.transactionid = transactionTable.transactionid
AND personTable.personid = 1
GROUP BY transactionTable.rating
ORDER BY COUNT(transactionTable.rating) desc
LIMIT 1
Jednak wymagam instrukcji, która robi to, co robi powyższa instrukcja dla każdego personid w personTable.
Moja próba jest poniżej; jednak przekroczył limit czasu mojego serwera MySQL.
SELECT personid AS pid,
(SELECT transactionTable.rating as MostCommonRating
FROM personTable, transactionTable
WHERE personTable.transactionid = transactionTable.transactionid
AND personTable.personid = pid
GROUP BY transactionTable.rating
ORDER BY COUNT(transactionTable.rating) desc
LIMIT 1)
FROM persontable
GROUP BY personid
Każda pomoc, jaką możesz mi dać, byłaby bardzo zobowiązana. Dzięki.
PERSONTABLE
:
RecordID, PersonID, TransactionID
1, Adam, 1
2, Adam, 2
3, Adam, 3
4, Ben, 1
5, Ben, 3
6, Ben, 4
7, Caitlin, 4
8, Caitlin, 5
9, Caitlin, 1
TRANSACTIONTABLE
:
TransactionID, Rating
1 Good
2 Bad
3 Good
4 Average
5 Average
Wyjściem instrukcji SQL, której szukam, byłoby:
WYDAJNOŚĆ:
PersonID, MostCommonRating
Adam Good
Ben Good
Caitlin Average