SQL 查询报告我认为使用最小聚合和 where 运算符进行过滤的错误最小值

问题描述 投票:0回答:2

我正在 coursera 上学习 SQL 课程,这个问题是在练习测验中出现的

“不包括 0.00 美元,双周最低工资是多少(请在答案中包含美元符号和小数点)?

现在我使用

得到了正确的答案(返回了 100.00 美元)
SELECT 
    min(Biweekly_High_Rate)
FROM
    salary_range_by_job_classification
WHERE Biweekly_High_Rate <> '$0.00'

但是,当我使用同一个表中的 SELECT * 进行查询时,我可以看到,至少在检索到的行中,有一个值 $15.00,小于 $100.00。为什么不返回 15.00 美元? table snip of SELECT * FROM salary_range_by_job_classification

sql aggregate-functions where-clause min
2个回答
1
投票

我建议删除美元符号并将结果字符串转换为十进制金额。还输入一个小数金额作为限制参数 (

0.00
),这样您就可以比较两个数字,而不是两个字符串。这应该会产生更令人期待的结果:

SELECT MIN(CONVERT(DECIMAL(10,2),REPLACE(BiWeekly_High_Rate,'$','')))
FROM salary_range_by_job_classification
WHERE CONVERT(DECIMAL(10,2),REPLACE(BiWeekly_High_Rate,'$','')) <> 0.00

看看进展如何。如果您比较两个字符串,您将通过使用 MIN 聚合来要求(我认为)第一个值

按字母顺序排列。


0
投票
你可以试试这个。

SELECT Min(Cast(Replace(biweekly_high_rate, '$', '') AS REAL)) FROM salary_range_by_job_classification WHERE biweekly_high_rate <> '$0.00'
    
© www.soinside.com 2019 - 2024. All rights reserved.