如何统计mysql子查询中的重复行
您好,我想统计一下有多少客户多次从我的网站购买 但问题是我想统计一下这个月有多少顾客在这个月或之前买了东西 这是我的桌子 命令如何统计mysql子查询中的重复行,mysql,sql,Mysql,Sql,您好,我想统计一下有多少客户多次从我的网站购买 但问题是我想统计一下这个月有多少顾客在这个月或之前买了东西 这是我的桌子 命令 --------------------------------------- |id | phone | name | date | --------------------------------------- | 1 | 000001 | name 1 | this month | | 2 | 000002 | na
---------------------------------------
|id | phone | name | date |
---------------------------------------
| 1 | 000001 | name 1 | this month |
| 2 | 000002 | name 2 | last month |
| 3 | 000001 | name 1 | last month |
| 4 | 000003 | name 3 | this month |
名字在这里不重要,所以我的问题是
SELECT
COUNT(DISTINCT (o.phone)) AS total,
COUNT(IF((SELECT
COUNT(o2.id)
FROM
orders o2
WHERE
o2.phone = o.phone) > 1,
1,
NULL)) AS returned
FROM
orders o
WHERE
date = 'this month'
这让我在返回的2中知道它在所有东西上循环,这就是为什么它将(名称2)计数两次
我需要一个解决方案来计算它只是一次我搜索了很多,但我没有找到任何东西
感谢您的帮助。在您的查询中,您可以通过电话识别客户。您需要计算本月不同客户的数量,并计算其中有多少是回头客
一种方法是条件聚合:
select count(*) as total, sum(is_returning) as returning
from
(
select phone, max(date = 'last month') as is_returning
from orders
group by phone
having max(date = 'this month')
) customers;
(MAX
在布尔表达式上是MySQL中的OR聚合,即如果至少有一个值为真,则结果为真。SUM
在MySQL中对布尔表达式计算真表达式。)提示:分组依据
谢谢,它正在工作,我只需要做一个小改动,但我的想法是我要找的是我改变了选择电话,最大值(日期='last month')的原样,在子查询中返回到选择电话,如果(计数(id)>1,1,0)原样返回