【问题标题】:SQL - Confusion with INSERT INTO...SELECT and COUNT(*)?SQL - 与 INSERT INTO...SELECT 和 COUNT(*) 混淆?
【发布时间】:2015-06-24 20:22:59
【问题描述】:

所以我有一个表Movement,其中有一列名为IDNumber。我想要做的是计算该列中每个 ID 的 ID 在IDNumber 中出现的次数

我可以像这样为每个 ID 单独执行此操作:

SELECT COUNT(*)FROM movement WHERE IDNumber = 379; 
SELECT COUNT(*)FROM movement WHERE IDNumber = 654;
SELECT COUNT(*)FROM movement WHERE IDNumber = 789;
SELECT COUNT(*)FROM movement WHERE IDNumber = 878;

但我想对IDNumber 中的ID 的所有 执行此操作,并且在一个查询中执行此操作,因为我正在处理的实际数据集要大得多。那么我该怎么做呢?

当我尝试这样做时,我创建了另一个表 IDNumbers,其中包含 ID 列,其中列出了 Movement 中存在的所有不同 ID,我这样做了:

INSERT INTO IDCount(`ID`,`Count`)
SELECT n.ID, m.COUNT(*) 
FROM  movement m  
JOIN IDNumbers n
ON n.ID = m.IDNumber 

我希望结果是这样的:

IDNumber   COUNT 
379        2 
654        1 
789        1 
878        1 

这是 SQL Fiddle

但我知道那是完全错误的……我该怎么做?任何帮助将不胜感激,谢谢!!

【问题讨论】:

  • select idnumber, count(*) .... group by idnumber where idnumber in (379, 654,789,878)?
  • @MarcB 谢谢!但我不能只列出所有的 ID 号......在我的实际数据集中,我有大约 9500 个。
  • 好吧,您确实说过“在一个查询中”...这是完成该任务的“一个查询”...您将获得与不同 ID 号一样多的行,例如不是全部 9500,但你会得到多行。
  • @MarcB 我的意思是实际上有 9500 个不同的 ID。无论如何,我找到了一种更简单的方法,但是谢谢!

标签: mysql sql select count sql-insert


【解决方案1】:

怎么样:

SELECT IDNumber, Count(IDNumber) FROM movement
GROUP BY IDNumber

你没有说它是插入到表格中的要求,对吧?

【讨论】:

  • 谢谢!但抱歉,我实际上希望它插入到表中,因为我需要保存这些结果,然后将它们添加到另一个表中。
  • INSERT INTO IDCount (ID, Count) SELECT IDNumber, Count(IDNumber) FROM Movement GROUP BY IDNumber....顺便说一句,不要将列命名为 COUNT!!
  • 我将在单独的评论中重申。不要命名字段计数!谈论令人困惑的代码!仅供日后参考。不想讲课
  • 很抱歉,我才意识到这一点。别担心,这不是它在真实数据库中的实际名称:)
【解决方案2】:

尝试使用 MySQL 按功能查看分组

SELECT COUNT(*), IdNumber FROM movement GROUP BY IdNumber;

您甚至可以通过使用 where 子句添加更多条件来使其更精彩

SELECT COUNT(*), IdNumber FROM movement WHERE  IDNumber < 1000 GROUP BY IdNumber;

SELECT COUNT(*), IdNumber FROM movement WHERE  IDNumber IN (1,2,3,4) GROUP BY IdNumber;

将结果保存到表格中 -

INSERT INTO target_table SELECT COUNT(*), IdNumber FROM movement GROUP BY IdNumber;

目标表将包含 countIDNumber

【讨论】:

  • 感谢您提供额外信息! :)
【解决方案3】:
    SELECT idnumber,COUNT(*) 
    FROM movement 
    group by IDNumber;

【讨论】:

    【解决方案4】:

    这是查询和插入:

    select
        n.id, count(*)
    from
        movement m
        join IDNumbers n on m.IDNumber = n.id
    group by 
        n.id
    ;
    
    INSERT INTO IDCount(`ID`,`Count`)
        select
            n.id, count(*)
        from
            movement m
            join IDNumbers n on m.IDNumber = n.id
        group by 
            n.id
    ;
    

    【讨论】:

    • 谢谢!我找到了一种更简单的方法,但是看看它是如何在我尝试做的方法中完成的会很有帮助
    • 简单总是更好,有利于您寻找、发现和识别更好的方式!
    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 2023-02-09
    • 2014-04-23
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多