社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

bebe03 • 5 年前 • 1695 次点击  

我有一张桌子 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
 
1695 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Sweet Chilly Philly
Reply   •   1 楼
Sweet Chilly Philly    6 年前

你直接问的是一个小组。您希望将您的注册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    6 年前

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

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    6 年前

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

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 若要筛选出不重复项,不需要子查询。