MySQL计数重复行

MySQL计数重复行,mysql,database,Mysql,Database,我有一张这样的桌子: jobid, orderid 里面有一些数据: jobid, orderid 1245, 6767 1235, 9058 6783, 6767 4991, 6767 9512, 9058 5123, 1234 现在我想要以下输出: jobid, orderid, orderid(total) 1245, 6767, 3 1235, 9058, 2 6783, 6767, 3 4991, 6767, 3 9512, 9058, 2 5123, 1234, 1 现在,CO

我有一张这样的桌子:

jobid, orderid
里面有一些数据:

jobid, orderid
1245, 6767
1235, 9058
6783, 6767
4991, 6767
9512, 9058
5123, 1234
现在我想要以下输出:

jobid, orderid, orderid(total)
1245, 6767, 3
1235, 9058, 2
6783, 6767, 3
4991, 6767, 3
9512, 9058, 2
5123, 1234, 1
现在,COUNT()不能按我想要的方式工作,我可能需要一些分组,但我不知道如何


提前感谢。

看起来您正在尝试获取类似于
作业ID、订单ID、订单ID出现次数的行。为此,可以使用子查询:

 SELECT jobid, orderid, 
        (SELECT COUNT(*) FROM 
         MY_TABLE INR 
             WHERE INR.orderid = OTR.orderid) as "orderid(total)"
 FROM MY_TABLE OTR

看起来您正在尝试获取类似于
jobid、orderid、orderid出现次数的行。为此,可以使用子查询:

 SELECT jobid, orderid, 
        (SELECT COUNT(*) FROM 
         MY_TABLE INR 
             WHERE INR.orderid = OTR.orderid) as "orderid(total)"
 FROM MY_TABLE OTR

你为什么这样做?您将进行大量冗余计数,并对服务器施加大量不必要的压力。我将通过两个问题来实现这一点:

SELECT jobid, orderid FROM my_table
要获取完整列表,请执行以下操作:

SELECT orderid, COUNT(*) FROM my_table GROUP BY orderid

获取每个orderid的总计数。然后在应用程序中结合这两个结果。这将比您的解决方案快得多。

为什么要这样做?您将进行大量冗余计数,并对服务器施加大量不必要的压力。我将通过两个问题来实现这一点:

SELECT jobid, orderid FROM my_table
要获取完整列表,请执行以下操作:

SELECT orderid, COUNT(*) FROM my_table GROUP BY orderid


获取每个orderid的总计数。然后在应用程序中结合这两个结果。这将比您的解决方案快得多。

对于SQL引擎来说,这比Tim的解决方案要多得多。@dtbarne这看起来像是OP要求的。我认为您的SQL语句不正确,因为当我用我的表替换我的表时,我有一个错误。同样,内部似乎不合适(和外部),但当我删除它们时,我得到的是所有行的总数,而不是我所需要的。@Devator我本来打算缩写内部和外部。它们是SQL关键字,因此可能可以解释这种破坏。这是正确的(尽管我不会使用
内部
外部
作为别名)。这对于SQL引擎来说比Tim的解决方案要多得多。@dtbarne这看起来像OP要求的。我认为您的SQL语句不正确,因为当我用我的表替换我的表时,我有个错误。同样,内部似乎不合适(和外部),但当我删除它们时,我得到的是所有行的总数,而不是我所需要的。@Devator我本来打算缩写内部和外部。它们是SQL关键字,因此这可能解释了中断。这是正确的(尽管我不会使用
内部
外部
作为别名)。也不起作用,因为count(orderid)总是给我“1”。此查询不正确。它不会计算相同的
orderid
的所有出现次数。也不起作用,因为count(orderid)总是给我“1”。此查询不正确。它不会计算相同的
orderid
的所有发生次数。我不会使用不必要的压力这个词。数据库将只发送一个简单的整数列(具有少量或许多重复项)。在这种情况下,您的方法会对应用程序施加“不必要的压力”,以合并结果(需要一些排序或散列).@ypercube我不知道OP使用的是什么语言,但在PHP中,我会用第二个查询中的
$orderid=>$count
键/值对填充$count数组,当迭代第一个查询的结果时,我会从该数组中获得每行的计数
$count[$orderid]
对应用程序的压力很小。我同意。另一种方法也一样,对db的压力很小。在结果的传递中只有一些冗余。这是另一种方法。哪一个性能更好取决于许多因素,包括该表中具有相似orderid的行的分布。我可以两者都试一下。我个人通常会首先采用较少冗余的方法。谢谢。我选择这种方式,因为我的这种方式会快得多。我以前也想过这个问题,但我认为使用一个查询会更好,但事实并非如此。我不会使用不必要的压力这个词。数据库将只发送一个简单的整数列(具有少量或许多重复项)。在这种情况下,您的方法会对应用程序施加“不必要的压力”,以合并结果(需要一些排序或散列).@ypercube我不知道OP使用的是什么语言,但在PHP中,我会用第二个查询中的
$orderid=>$count
键/值对填充$count数组,当迭代第一个查询的结果时,我会从该数组中获得每行的计数
$count[$orderid]
对应用程序的压力很小。我同意。另一种方法也一样,对db的压力很小。在结果的传递中只有一些冗余。这是另一种方法。哪一个性能更好取决于许多因素,包括该表中具有相似orderid的行的分布。我可以两者都试一下。我个人通常会首先采用较少冗余的方法。谢谢。我选择这种方式,因为我的这种方式会快得多。我以前想过这个问题,但我认为使用一个查询会更好,但事实并非如此。