我想在mysql中询问一个查询,我有一个看起来像这样的表:
表XYZ
sender reciever
1 2
1 3
2 2
4 1
5 0
7 5
8 5
要求是:
在收件人中找到那些收件人的频率大于发件人列中的频率的条目。
这意味着输出应为
reciever
2
3
0
5
我试过它:
SELECT reciever
FROM XYZ
WHERE count(reciever)>count(sender)
答案 0 :(得分:2)
我认为你的意思是:
SELECT reciever
FROM XYZ
WHERE reciever > sender
答案 1 :(得分:1)
看起来你想简单地比较频率。为此,您可以在两个单独的子查询中计算两列的频率,然后将它们连接起来进行比较。 LEFT JOIN不会消除SENDER
;
SELECT a.reciever
FROM (SELECT reciever, COUNT(*) c FROM mytable GROUP BY reciever) a
LEFT JOIN (SELECT sender, COUNT(*) c2 FROM mytable GROUP BY sender) b
ON a.reciever = b.sender AND c<=c2
WHERE sender IS NULL
答案 2 :(得分:1)
在reciver中找到有计数的数字&gt;计入发件人。因此,请计算reciver
和sender
中的每个数字重复次数,然后比较计数。我使用LEFT JOIN
可以使用reciever
中的数字,而不是sender
中的数字:
SELECT r.reciever
FROM (
SELECT reciever, COUNT(*) cnt
FROM XYZ
GROUP BY reciever
) r
LEFT JOIN (
SELECT sender, COUNT(*) cnt
FROM XYZ
GROUP BY sender
) s ON s.sender = r.reciever AND s.cnt < r.cnt