gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:38:00 24 4
gpt4 key购买 nike

我管理一个注册系统,人们可以在其中注册类(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com