Py学习  »  DATABASE

MySQL:对整个表应用按查询分组

bebe03 • 4 年前 • 870 次点击  

我有一张桌子 tbl_cross 包含字段 number 和田野 register_id 那是另一张桌子的外键 tbl_registers 包含主键的 id 还有一把外键 collection_id .

通过下面的查询,我得到寄存器1050的重复数。

SELECT qt.*
FROM 
(
    SELECT cr.number, COUNT(*) AS cnt 
    FROM tbl_cross AS cr
    WHERE cr.register_id = 1050 
    GROUP BY cr.number
) AS qt
WHERE qt.cnt > 1 
ORDER BY qt.number ASC

结果是例如:

number | cnt
    11 |   2
   181 |   3
   252 |   2

很简单。现在,我想知道怎么和桌子一起去 待处理寄存器 得到每个寄存器的每个副本。

register_id | number | cnt
       1050 |     11 |   2
       1050 |    181 |   3
       1050 |    252 |   2
       2023 |     12 |   2
       3034 |     77 |   3
       3034 |    106 |   2

或添加WHERE条件以获取属于集合56的每个寄存器的重复值( collection_id=56 ),例如。

谢谢。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51304
 
870 次点击  
文章 [ 3 ]  |  最新文章 4 年前
Sweet Chilly Philly
Reply   •   1 楼
Sweet Chilly Philly    5 年前

你直接问的是一个小组。您希望将您的注册id分组,这样就不会有重复的注册id,而且您仍然可以看到每个注册id的编号。

Tech on the net是一个非常好的参考,可以让您的所有SQL问题都看一看: https://www.techonthenet.com/sql/group_by.php

一切顺利,欢迎来到Stackoverflow!!

e_i_pi
Reply   •   2 楼
e_i_pi    5 年前

我相信你想要的是这样的:

SELECT *
FROM (
    SELECT
        reg.id,
        reg.collection_id,
        cr.number,
        COUNT(*) AS ct
    FROM tbl_registers AS reg
    INNER JOIN tbl_cross AS cr
        ON cr.register_id = reg.id
    GROUP BY
        reg.id,
        reg.collection_id,
        cr.number
) duplicates
WHERE duplicates.ct > 1
-- AND duplicates.collection_id = 56
Barmar
Reply   •   3 楼
Barmar    5 年前

连接两个表并按两列分组。

SELECT cr.register_id, cr.number, COUNT(*) AS cnt
FROM tbl_cross AS cr
JOIN tbl_register as r ON cr.register_id = r.id
WHERE r.collection_id = 56
GROUP BY register_id, number
HAVING cnt > 1

你可以用 HAVING 若要筛选出不重复项,不需要子查询。