我们说我有这样一张桌子:
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的行?
答案 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