Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何统计mysql子查询中的重复行_Mysql_Sql - Fatal编程技术网

如何统计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)原样返回