MySQL 从数据库中删除分组记录数小于值的数据库

标签 mysql

我有一个与此类似的数据库:

Name    State
Bill    CA
Joe     NY
Susan   CA

我知道我可以获得每个州的记录总数,如下所示:

SELECT State, COUNT(*) as count FROM users GROUP BY State

我正在尝试删除状态总数小于 2(或任意任意数字)的所有记录

类似这样的东西(伪代码):

 DELETE FROM users WHERE totalUsersInState < 2

所以最终的数据库应该是这样的

Name    State
Bill    CA
Susan   CA

正确的语法是什么?我想不通。

最佳答案

我们可以使用连接到内联 View (MySQL 术语中的派生表)

先将其写为 SELECT 语句

SELECT t.*
  FROM users t
  JOIN ( SELECT r.state
           FROM users r
          GROUP 
             BY r.state
         HAVING SUM(1) < 2
       ) s
    ON s.state = t.state

验证这些是我们要删除的行,然后通过替换第一个 SELECT 关键字将其转换为 DELETE 语句...

DELETE t.*
  FROM ...

请注意,由于连接谓词中的相等比较,这不会删除 state 具有 NULL 值的行。

关于MySQL 从数据库中删除分组记录数小于值的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48592040/

相关文章:

php - 在类似运算符中输出 $post 值

php - 获取pdf中带有日期的姓名数量

javascript - 如何在 PHP 中更新数据库表的接受/拒绝

mysql - 数据采集​​用什么数据库?

PHP解析错误

mysql - 如何只选择满足条件的最后一行?

mysql - 避免复制到临时表

mysql 结果需要我的例子

mysql - 请让我知道 mysql 查询 : alias in where clause

mysql - 子查询的 WHERE 需要主查询中的字段