PostgreSql - SELECT Max从另一个表重复

时间:2017-02-07 13:28:04

标签: sql postgresql

考虑我有两个表tab1tab2

+-----------+-----------+
| ID_t1     |  col2     |
+-----------+-----------+
| 1         |  1        |
+-----------+-----------+
| 2         |  1        |
+-----------+-----------+

tab2

+-----------+-----------+
| ID_t2     |  ID_t1    |
+-----------+-----------+
| 1         |  1        |
+-----------+-----------+
| 2         |  1        |
+-----------+-----------+
| 3         |  1        |
+-----------+-----------+
| 4         |  2        |
+-----------+-----------+

我尝试在表格tab2中找到具有tab1.col1 = 1和最大行的对象,因此结果应该像对象1

+-----------+-----------+
| ID_t1     |  col2     |
+-----------+-----------+
| 1         |  1        |
+-----------+-----------+

我试试这个:

SELECT ID_t1 FROM tab1 
     WHERE tab1.col2 = 1 and 
           ID_t1 = (SELECT ID_t1 FROM tab2 WHERE -- MAX ONE REPEATED IN THIS TABLE)

我真的堆叠如何与这个查询竞争,你能帮我吗。

4 个答案:

答案 0 :(得分:1)

你在找这个:

SELECT ID_t1 
FROM tab1 
WHERE tab1.col2 = 1 AND
      ID_t1 = (SELECT ID_t1 
               FROM tab2 
               GROUP BY ID_t1 
               ORDER BY COUNT(*) DESC 
               LIMIT 1)

答案 1 :(得分:1)

您可以在子查询中使用LIMIT

select
from tabl1
where id_t1 in (
    select id_t1
    from tab2
    group by id_t1
    order by count(*) desc
    limit 1
) and col2 = 1;

答案 2 :(得分:1)

试试这个

 select ID_t1, col2 from tab1 
 where ID_t1=1 and 
 col2=
 (
 select ID_t1 from tab2 
 group by ID_t1
 order by count(*) DESC
 limit 1
 )

答案 3 :(得分:0)

我找到了一个问题的答案:

SELECT 
  tab1 as id, 
  COUNT(*) as nombre
FROM 
  tab1, tab2 
WHERE 
  tab2.ID_t1 = tab1.ID_t1 and
  tab1.col2 = 1
GROUP BY tab2.ID_t1
ORDER BY nombre desc LIMIT 1