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的主要内容,如果未能解决你的问题,请参考以下文章

mysql原生语句where数组条件查询

mysql where条件使用了or会不会扫全表

mysql中on,in,as,where如何用,意思是啥?

mysql语句where条件中的是啥意思

mysql使用where条件数字类型被强转

7_mysql查询之where子句