我在执行一项任务时,没有正确地执行这个SQL查询。问题是:
不包括0.00美元,最低双周高工资率是多少(请在回答中包括美元符号和小数点)?
我所做的:
Select
MIN(Biweekly_high_Rate)
FROM salary_range_by_job_classification
WHERE MIN(Biweekly_high_rate)>0;但这给了我0的答案。而0不是正确的答案,然后我看了这个解。我不明白最后的解决方案
Select Biweekly_high_Rate
From salary_range_by_job_classification
ORDER BY LENGTH(Biweekly_high_Rate) ASC, Biweekly_high_Rate ASC;我怎样才能通过陈述来理解订单?
发布于 2019-08-23 11:35:47
以下内容也应有效:
SELECT
MIN(Biweekly_high_Rate)
FROM salary_range_by_job_classification
WHERE Biweekly_High_Rate <> '$0.00'
ORDER BY Biweekly_High_Rate ASC;您正在选择min Biweekly_high_Rate FROM表,使用WHERE <> '$0.00'排除等于零的值。
那么您就是ORDERING by Biweekly_High_Rate,以获得第一个值的正确性。
发布于 2019-04-07 14:24:26
我可以推断biweekly_high_rate是一个数字,但是列被定义为一个字符串。这不是很好的数据库设计,因为字符串与数字的排序不一样。请考虑下列数字及其适当的顺序:
Numeric ordering: Alphabetical ordering:
2 11
11 110
12 12
110 2处理这个问题的一种方法是首先对长度为1的所有字符串进行排序,然后对长度为2的所有字符串进行排序,然后对长度为3的所有字符串进行排序,以此类推。然后在每一组中打破领带,按字母顺序排序。首先根据长度排序,然后按值排序的解决方案实现了这一点。
但是,如果作者使用数据的方式是这样的话,将列定义为数字而不是字符串会更明智。它还具有其他优点,例如允许列上索引来优化排序。将数字存储为数字而不是字符串也需要更少的存储空间。
令人费解的是,第二个查询声称是一个解决方案,因为它不排除0.00值,也没有找到最小值。我会在办公时间和老师讨论这个问题,并问为什么会认为这是解决方案。
列是否使用美元符号来存储像'$0.00'这样的字符串?这也不是传统的数据库设计,因为货币格式不应该存储在数据库中。
您的第一个问题实际上更接近于我所给出的答案。但不能在WHERE子句中使用MIN()。像MIN()这样的聚合函数需要在行组上工作,但是WHERE子句只适用于逐行工作。
这样做可能会奏效:
Select
MIN(Biweekly_high_Rate)
FROM salary_range_by_job_classification
WHERE Biweekly_high_rate>0;但这仍然是在假设biweekly_high_rate应该是一个数值。
发布于 2019-04-07 14:41:28
Select Biweekly_high_Rate
From salary_range_by_job_classification
ORDER BY LENGTH(Biweekly_high_Rate) ASC, Biweekly_high_Rate ASC;为了澄清您要求的内容,并详细说明Bill提到的列应该是数字基础,而不是字符串,顺序基本是采用双排序。
首先想一想得到一个人的名单,然后你想让他们按姓氏按字母顺序排列,然后按名字排列。我们认为这很简单--所有的姓氏按字母顺序排列,然后是所有的名字。但是,如果你有5个姓史密斯,会怎样呢?第二个排序是按名字排序的。
Jones Gary
…
Smith, Adam
Smith, Betty
Smith, Joe
Smith, Nancy
Smith, Veronica
…
Walker, Tim因此,如果列出多个字段,则order对第一个字段进行主要排序。然后,一旦对所有这些进行排序,在该级别的每个级别中,次要排序就是下一个排序,等等,您可能会有一个带有3、4或更多列的顺序。
现在,回到你的例子。正如Bill提到的,双周高利率的数据似乎是一个字符串值。因此,按长度排序(Biweekly_Hi_Rate) ASC意味着按照上升顺序(因此ASC vs DESCending)对字符串表示的长度进行第一排序。在第一个级别排序之后,然后按照双周hi比率本身进行排序。
因此,让我们以下面的基于字符串的速率和这些字符串的隐含长度()为例。
BiWeeklyHiRate
13
5
11
9
14
2
10同样的顺序,但只是显示长度。
LENGTH of string BiWeeklyHiRate
2 13
1 5
2 11
1 9
2 14
1 2
2 10现在,如果只是按双周的长度()排序。请注意,每周利率有所有的单长度利率,然后所有的2位数利率次之。但请注意,在每段共同的长度内,每周费率没有排序。
LENGTH of string BiWeeklyHiRate
1 5
1 9
1 2
2 13
2 11
2 14
2 10所以,现在,第二种速率被应用到
LENGTH of string BiWeeklyHiRate
1 2
1 5
1 9
2 10
2 11
2 13
2 14https://stackoverflow.com/questions/55559684
复制相似问题