首页 > 解决方案 > 如何在正文中编写此要求的查询?

问题描述

我想打印每个学生创建的hacker_id、姓名和挑战总数。按挑战总数降序排列您的结果。如果多个学生创建了相同数量的挑战,则按hacker_id 对结果进行排序。如果不止一名学生创建了相同数量的挑战,并且计数小于创建的最大挑战数量,则将这些学生排除在结果之外。

黑客表

黑客表

挑战表

挑战表

我试过这个查询

SELECT b.hacker_id
    ,a.name
    ,count(b.hacker_id)
FROM hackers AS a
INNER JOIN challenges AS b ON b.hacker_id = a.hacker_id
GROUP BY b.hacker_id
    ,a.name
ORDER BY count(b.hacker_id);

但我没有得到预期的输出。

标签: sql-server

解决方案


SELECT a.hacker_id, ISNULL(count(c.challenge_id), 0)
FROM hackers a
LEFT JOIN challenges c ON c.hacker_id = a.hacker.id
group by a.hacker_id

使用左连接,您将从左表(“黑客”)中获取所有元素,并计算每个元素的挑战(如果存在)。如果count(c.challenge_id)的结果为NULL,则将其替换为 0 值


推荐阅读