【发布时间】:2021-04-04 19:12:51
【问题描述】:
我有一个表 TABLE1,有两列:SSN 和日期。
我有另一个表 TABLE2,其中包含 SSN、姓名和姓氏。
我想查看与第一个表中出现次数最多的 SSN 关联的人的姓名和姓氏(具有 SSN 和日期的表)
我应该写哪个查询?
【问题讨论】:
-
不要破坏你的问题。
我有一个表 TABLE1,有两列:SSN 和日期。
我有另一个表 TABLE2,其中包含 SSN、姓名和姓氏。
我想查看与第一个表中出现次数最多的 SSN 关联的人的姓名和姓氏(具有 SSN 和日期的表)
我应该写哪个查询?
【问题讨论】:
最快的方法大概是加入前聚合:
select *
from (select t1.ssn
from table1 t1
group by t1.ssn
order by count(*) desc
limit 1
) t1 left join
table2 t2
using (ssn)
【讨论】:
试试这个。
SELECT t1.ssn, t2.name, t2.surname, count(*) as vol
FROM table1 t1
LEFT JOIN table2 t1 on t1.ssn = t2.ssn
GROUP BY 1
ORDER BY count(*) DESC
LIMIT 1
【讨论】:
在WHERE 子句中使用子查询,它返回在table1 中出现最多的SSN:
SELECT *
FROM table2
WHERE SSN = (SELECT SSN FROM table1 GROUP BY SSN ORDER BY COUNT(*) DESC LIMIT 1)
使用SSN 上的索引(我假设它存在),这是获得结果的最快方法。
【讨论】: