【问题标题】:Sql Order by Student Grade NoSql 按学生年级排序
【发布时间】:2023-04-08 01:59:01
【问题描述】:

我想订购我的数据,我有以下数据。

以下是我的数据

 - 1
 - 1+
 - 1-
 - 2
 - 2+
 - 2-
 - 3
 - 3+
 - 3-
 - 4
 - 4+
 - 4-

我想这样订购:

 - 1+
 - 1
 - 1-
 - 2+
 - 2
 - 2-
 - 3+
 - 3
 - 3-
 - 4+
 - 4
 - 4-

我试过了,但是我没有得到我想要的结果

select * from RatingGrade 
where ScoreCardID=1 
order by GradeNo

【问题讨论】:

  • 顺便问一下哪个数据库?
  • 本着@GolezTrol 提到的交叉兼容性的精神,最好将tags 单独留在这个上

标签: mysql sql-server database


【解决方案1】:

试试这个:

select * from RatingGrade where ScoreCardID=1 
 order by GradeNo + ','

编辑

这是如何工作的

是的,正如人们指出的那样,这是一个棘手且棘手的解决方案。

有时只是开箱即用。在这里,我只是查看了ascii图表。 + 小于 -。所以这两个的顺序是整理出来的。接下来我只需要一个介于这两者之间的字符,那就是,。这解释了它是如何工作的。

工作中的相关 ASCII 值:

43        + (plus)
44        , (comma)
45        - (hyphen)
48-57    numbers 0 to 9.

首先比较第一个字符,它是一个数字。由于它们对于集合是相同的,所以比较第二个字符。这将是 + 或 - 或 ,。所以它们按ascii顺序排序。由于在此阶段已解决顺序,因此无需比较第三个字符。

【讨论】:

  • 聪明但老套。哈克,但聪明。
  • 那是一些巫术。这是如何运作的?起初我以为它是长度,但 + 和 - 长度相同。是因为 ASCII 值吗?
  • 当我运行这个时,我得到减号,加号,然后是#。例如:1-,1+,1 等可能我的机器搞砸了:>
  • 是的,我在 mysql 领域已经结束了,我对你的解决方案也是如此。正如@GolezTrol 在他的答案下方的 cmets 中所说,您的将在 mysql 中工作,并在新的Sql Fiddle 中进行此调整
  • 啊,根据其他地方的 cmets,如果您使用 CONCAT,这在 MySQL 中有效
【解决方案2】:

您可以使用 substr 来获取字符串的一部分。这允许您首先按第一个字符排序,然后是第二个字符的特殊情况:

select * from  RatingGrade 
where ScoreCardID=1   
order by
  substring(GradeNo, 1, 1),
  case substring(GradeNo, 2, 1)
    when '+' then 'A'
    when '-' then 'C'
    else 'B'
  end

-edit- 将substr 更改为substring,这应该适用于 MySQL 和 SQL Server。

【讨论】:

  • 我要你的工作......干得好......我发誓只有你的工作
  • 我的可能是最不容易出现代码页或排序规则的。此外,我的应该适用于 MySQL 和 SQL Server。但是,从分数来看,您似乎也有 Pradeem 的工作?那个很聪明。它添加了一个,,因此要排序的值变为1+,1,1-,。逗号在“+”和“-”之间排序,这就是它按您想要的方式排序的原因。我不确定这是否适用于任何排序规则,但如果它适用于您,它肯定是一个简单的解决方案。
  • 我知道,我看到它就想高兴,把它也放在这里Sql Fiddle
  • 那是因为它是一个 SQL Server 解决方案,就像 JamesZ 的一样。我的应该是便携的。通过使用CONCAT, 连接到值,可以为 MySQL 制作 Pradeep。
  • 好吧,我给你撒了一些点,我喜欢它在其他订购泥潭中的策略
【解决方案3】:

这应该可行,它假设数字在 1 到 9 之间:

select * from RatingGrade
order by 
  convert(int, left(GradeNo, 1)), 
  case right(GradeNo,1) when '+' then 1 when '-' then 3 else 2 end

SQL Fiddle 中的示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 2019-04-20
    • 2021-12-28
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    相关资源
    最近更新 更多