mysql - SQL是否可以组合group、count和distinct?

标签 mysql

我管理一个注册系统,人们可以在其中注册类(class),并且我有以下查询来计算一些统计数据:

SELECT p.id_country AS id, c.name, COUNT(p.id_country) AS total
                FROM participants p
            LEFT JOIN countries c ON p.id_country = c.id
            WHERE p.id_status NOT IN (3,4,13,14)
            GROUP BY p.id_country
            ORDER BY total DESC

这个查询工作正常,它准确地显示了每个国家/地区的参与者数量。 现在我们的系统可以注册多个类(class),并且每次注册都会在参与者表中插入一个新行。我知道,这不是理想的情况,但不幸的是现在改变这一点已经太晚了。如果参与者注册第二门(或第三门、第四门等)类(class),那么他将使用相同的电子邮件地址。因此,在参与者表中,同一个电子邮件地址可以出现多次。

我想做的是更改此查询,以便考虑到每个电子邮件地址只能使用一次。该字段只是 p.email,我认为我应该使用 DISTINCT 做一些事情来实现这一点。但无论我尝试什么,它要么给出非常奇怪的结果,要么给出错误。

可以这样做吗?

最佳答案

尽量不要在查询中混合使用不同和分组依据。您会得到相同的结果:

select distinct  p.id_country from participants

比做

select p.id_country from participants group by p.id_country

您需要的是过滤掉重复项:

SELECT p.id_country AS id, c.name, COUNT(p.id_country) AS total
            FROM participants p
        LEFT JOIN countries c ON p.id_country = c.id
        WHERE p.id_status NOT IN (3,4,13,14)
              and not exists 
           (select email from participants p2 where p1.email=p2.email and p1.id>p2.id)
        GROUP BY p.id_country
        ORDER BY total DESC

这只会对电子邮件进行一次计数,不计算具有重复电子邮件的帐户的较新 IDS。

关于mysql - SQL是否可以组合group、count和distinct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16583987/

相关文章:

php - MYSQL 错误 1096 - 未使用表 - CODEIGNITER

mysql - 在 mysql 中插入新记录之前,如何组合多个条件(存在和不存在)检查?

php - 如果两个表不共同,则连接会删除变量

php - 获取数组 - 在 CSV 中合并一些结果

mysql - mysql 查询必须如何才能达到显示的结果?

mysql - 在数组中搜索 JSON 数据类型的对象属性时出现问题

php - mysql如何将同一个表的一个字段的数据复制到另一个字段

mysql - MACOS/MySQL/SQL Developer 连接错误 - 时区问题

php - 将 SQL 查询循环合并为一个 SQL 查询

mysql从字符串中获取整个单词所有包含字符的单词