SQL - 查找具有n个重复值的行

时间:2015-04-14 15:35:32

标签: sql

我们说我有这样一张桌子:

    OrderId |  CustomerId  |  ProductName
    ======================================
      73    |  301         |  Sponge
      74    |  508         |  Garbage Bag
      75    |  301         |  Spoon
      76    |  301         |  Bacon
      77    |  508         |  Dog treats
      78    |  301         |  Paper
      79    |  905         |  Text book

我想找一个过去订了两个订单的客户。我该如何设置查询?

对于上表,查询将返回客户508的两行。

我如何修改它以返回拥有前一个订单的客户,以便它返回客户905的行?

3 个答案:

答案 0 :(得分:3)

select customerId, count(*) 
from mytable
group by customerId
having count(*) >= 2

答案 1 :(得分:1)

如果您只需要CustomerId个表中只有一个订单的人(他们只存在一次),那么以下查询会对客户进行分组并计算他们在表格中出现的次数(此处仅显示出现一次的人) ,按你的意愿修改。)

SELECT
  CustomerId
FROM
  table
GROUP BY 1
HAVING COUNT(*) = 1

我们假设您要列出每个客户和他们已下达但不少于2的订单数量,然后修改上述查询以在要选择的列列表中添加COUNT(*)并且{ {1}}这样的条件:

HAVING

答案 2 :(得分:0)

我昨天使用了类似的SQL查询。

我将它改编到你的桌子上,但我不能100%确定它会起作用。

CREATE TEMPORARY TABLE COMMANDS
SELECT OrderId, ProductName, COUNT(CustomerId) AS NbCmds
FROM your_table
GROUP BY OrderId;

SELECT CustomerId
FROM COMMANDS
WHERE NbCmds > 1;

编辑:您也可以使用HAVING子句执行此操作。看看here