MySql:WHERE NOT EXISTS(跳过重复项)与 group by
Posted
技术标签:
【中文标题】MySql:WHERE NOT EXISTS(跳过重复项)与 group by【英文标题】:MySql: WHERE NOT EXISTS (skip duplicates) with group by 【发布时间】:2021-02-20 11:31:51 【问题描述】:我有这个挑战,我正在寻找一种解决方案,但我不明白为什么会出错。
编写查询以打印hacker_id、姓名和每个学生创建的挑战总数。按挑战总数降序排列您的结果。如果多个学生创建了相同数量的挑战,则按hacker_id 对结果进行排序。如果多个学生创建了相同数量的挑战,并且计数小于创建的最大挑战数量,则将这些学生排除在结果之外。
Hackers:hacker_id是黑客的id,name是黑客的名字。 挑战:challenge_id 是挑战的 id,hacker_id 是创建挑战的学生的 id。
我的解决方案:
select h.hacker_id, h.name, count(c.challenge_id) as total from challenges c
join hackers h
on h.hacker_id= c.hacker_id
where not exists
(select h1.hacker_id, h1.name, count(C1.challenge_id) as total1 from challenges C1
join hackers h1 on h1.hacker_id= c1.hacker_id
group by h1.hacker_id, h1.name
having total1 < max(count(c.challenge_id) and total1 = count(c.challenge_id)
order by total1 desc)
group by h.hacker_id, h.name
order by total desc
我收到此错误: 第 1 行的 ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以了解在 'order by total1 desc) 附近使用的正确语法
按 h.hacker_id、h.name 分组 在第 16 行按总 desc 排序
【问题讨论】:
内部order by没有意义,去掉就行了。 ...与存在查询中的“SELECT 1”以外的任何内容一样 我怀疑你已经知道 max(count 永远不会起作用。也许看看 meta.***.com/questions/333952/… 并重新开始 确保查询中的 '(' 和 ')' 的数字相同。 (目前它们不相等)。 我按照您的建议进行了更改,但现在我收到了一个新错误。第 2 行出现错误 1248 (42000):每个派生表都必须有自己的别名 【参考方案1】:select h.hacker_id, h.name, count(c.challenge_id) as total from challenges c
join hackers h
on h.hacker_id= c.hacker_id
where not exists
(select t.total1
from (select count(C1.challenge_id) as total1
from challenges C1
join hackers h1 on h1.hacker_id = c1.hacker_id
group by h1.hacker_id) t
having t.total1 < big = (select max(count)
from (select count(c3.challenge_id) as count from challenges c3 group by c3.hacker_id))) big
and t.total1 = 1
)
group by h.hacker_id, h.name
order by total desc
【讨论】:
以上是关于MySql:WHERE NOT EXISTS(跳过重复项)与 group by的主要内容,如果未能解决你的问题,请参考以下文章