【问题标题】:How to write query for this requirement as in body?如何在正文中编写此要求的查询?
【发布时间】:2020-02-06 19:44:24
【问题描述】:

我想打印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


    【解决方案1】:
    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 值

    【讨论】:

    • 如果 challende_id 为空或为零怎么办?您还应该解释您的查询。
    • ISNULL(c.challende_id,0)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多