假设这是我的数据库表: id,client_id,order_name
每增加一个订单都会创建新记录。例如:
1, 1, super-glue
2, 1, super-glue
3, 1, plastic wallet
如何在单个查询中找到客户订购了多少个不同的商品?
所以在这种情况下它会返回2。
我知道我必须使用SELECT {something in here} WHERE client_id = 1
但我不确定如何计算不同的物品。
答案 0 :(得分:3)
在DISTINCT order_name中使用COUNT:
SELECT COUNT(DISTINCT order_name)
FROM yourTable
WHERE client_id = 1
答案 1 :(得分:2)
只计算一个客户的不同商品,您可以使用
SELECT COUNT(DISTINCT order_name)
FROM orders
WHERE client_id=1;
如果您想要每个客户的摘要计数,您可以使用group by
表达式:
SELECT client_id, COUNT(DISTINCT order_name)
FROM orders
GROUP BY client_id;
如果您想要每个客户和order_name的最新行,您可以使用子查询:
SELECT id, client_id, order_name
FROM
(
SELECT max(id) AS id
FROM orders
GROUP BY client_id, order_name
) single_orders
INNER JOIN orders ON single_orders.id = orders.id
ORDER BY client_id, order_name;
这将为每个不同的客户订单组合选择最大ID,然后获取相应的行数据。
最后,在MySQL中,您还可以获得由任何客户订购的不同商品的逗号分隔列表:
SELECT client_id, group_concat(DISTINCT order_name ORDER BY order_name)
FROM orders
GROUP BY client_id
ORDER BY client_id;