我在编写 SQL 查询时遇到问题
Sculptor (SRID, SR_FName, SR_LName, SR_DOB)
Sculpture (SEID, SE_Name, SE_Value, SRID*, SID*)
Model (MID, M_FName, M_LName, M_Salary)
列出雕塑家的姓氏和雕塑总值(value)(作为一个名为“总计”的字段 Sculpture Value”)为每位雕塑家雕刻的所有雕塑(四舍五入到小数点后两位),按总值(value)从小到大排序。仅列出雕塑总值(value)低于 10 万的雕塑家。
我的查询是:
SELECT SR_LName,
SE_Value AS TotalSculptureValue
FROM Sculptor
JOIN Sculpture USING (SRID)
HAVING ( SE_Value ) < 100000
最佳答案
您确实需要学习使用聚合函数,但这是它的工作原理:
SELECT SR_LName,
sum(SE_Value) AS "TotalSculptureValue"
FROM Sculptor
JOIN Sculpture USING (SRID)
group by SR_LName
首先尝试运行该查询。您应该会看到所有雕塑家的名字及其值的总和。
然后将 HAVING
添加回去,因为这是限制聚合函数结果的方式:
SELECT SR_LName,
sum(SE_Value) AS "TotalSculptureValue"
FROM Sculptor
JOIN Sculpture USING (SRID)
group by SR_LName
having sum(SE_Value) < 100000
HAVING
不同于 WHERE
。如果你想限制非聚合列,比如名字,你可以使用 WHERE
:
SELECT SR_LName,
sum(SE_Value) AS "TotalSculptureValue"
FROM Sculptor
JOIN Sculpture USING (SRID)
where SR_LName like '%Ali%'
group by SR_LName
having sum(SE_Value) < 100000
这将为您提供名称中包含 Ali 且总值(value)小于 100000 的所有雕塑家。
关于mysql - SQL 查询帮助,数据现在显示在 1 列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40871384/