编辑:我正在使用MySQL,我找到了另一篇帖子与相同的问题,但它是关于Postgres的;我需要MySQL。
经过对该网站和其他网站进行广泛搜索后,我提出了这个问题,但没有找到符合我的意图的结果。
我有一个人员表(recordid,personid,transactionid)和一个交易表(transactionid,rating)。 我需要一个单一的SQL语句,可以返回每个人拥有的最常见评级。
我目前有这个SQL语句,它返回指定人员ID的最常见评级。 它有效,也许它可以帮助其他人。
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
然而,我需要一个与上述语句对于personTable中的每个personid执行相同操作的语句。
我的尝试如下;然而,它会使我的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
如果您能给我任何帮助,我将不胜感激。谢谢。
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
我要搜索的SQL语句的输出结果应该是:
输出:
PersonID, MostCommonRating
Adam Good
Ben Good
Caitlin Average
TRANSACTIONTABLE
的第一行中有一个拼写错误,1 GOOD
不应该是1非常差
,因为你有3 GOOD
吗? - Mahmoud Gamal