Sql 不使用“最大值”和“排序依据”将最高值排序到最低值

Sql 不使用“最大值”和“排序依据”将最高值排序到最低值,sql,sql-server,Sql,Sql Server,我想获得使用了count()的列的最大计数,并想在不使用max或orderbydesc的情况下,将列的值从高到低排序 我试过了 SELECT COUNT(subject) AS CNT, student FROM AUTHOR GROUP BY student AU1 WHERE not exists (SELECT * FROM AUTHOR AU2 WHERE AU2.student <> AU1.student AND AU2.subjec

我想获得使用了
count()
的列的最大计数,并想在不使用
max
orderbydesc
的情况下,将列的值从高到低排序

我试过了

SELECT COUNT(subject) AS CNT, student
FROM AUTHOR
GROUP BY student AU1
WHERE not exists (SELECT * FROM AUTHOR AU2 
                  WHERE AU2.student <> AU1.student AND AU2.subject > AU1.CNT)

但是,如果没有按desc排序的
MAX
确定,则不允许使用desc,也不允许使用MAX

SELECT
    COUNT(subject) AS CNT, student
FROM
    AUTHOR
GROUP BY 
    Student
ORDER BY 
    -CNT
这在每个数据库软件中都不起作用。 另一个版本:

SELECT * FROM (
    SELECT
        COUNT(subject) AS CNT, student
    FROM
        AUTHOR
    GROUP BY 
        Student
    ) t
ORDER BY 
    -CNT

您可以按ASC使用
订单

SELECT COUNT(subject) AS CNT, student
FROM AUTHOR
GROUP BY Student
ORDER BY (- CNT) ASC;

如果希望结果按特定顺序排列,则需要使用
orderby
。这是使用SQL的规则之一。

如果没有明确的
orderby
就根本无法保证顺序您可以使用RANK(),但orderby仍然存在:)“如果没有明确的orderby,就根本无法保证顺序”的确@LukaszSzozda所说的是非常正确的。事实上,如果没有
ORDER BY,在ANSI/ISO SQL标准中定义,返回和排序在大多数情况下取决于平台,这意味着数据库将按照与表匹配的顺序返回记录,但该结果集的排序在每次运行时可能是不确定的(随机的),在SQL中每次运行时都要获得真正确定(固定)的结果的唯一方法是在
ORDER BY
子句中始终包含一个具有主键/唯一键的列。实际上,您不需要子查询,但我怀疑OP是否希望这样solution@quantummind当我使用您的查询时,我得到了一个错误,例如无效的列名“COUNT”,我试图获取列中的最高计数。@svisvesh好的,我已经添加了另一个版本来在mysql中工作。
SELECT COUNT(subject) AS CNT, student
FROM AUTHOR
GROUP BY Student
ORDER BY (- CNT) ASC;