我有下表:
ID Name Sales
1 Kalle 1
2 Kalle -1
3 Simon 10
4 Simon 20
5 Anna 11
6 Anna 0
7 Tina 0
我想编写一个只返回行的SQL查询 代表销售额>的销售人员; 0
ID Name Sales
3 Simon 10
4 Simon 20
5 Anna 11
6 Anna 0
这可能吗?
答案 0 :(得分:2)
您可以使用a HAVING子句轻松获取销售额大于0的人员姓名:
select name
from yourtable
group by name
having sum(sales) > 0;
此查询将同时返回Simon
和Anna
,如果要返回每个名称的所有详细信息,可以在WHERE子句中使用上述内容来获取最终结果:
select id, name, sales
from yourtable
where name in (select name
from yourtable
group by name
having sum(sales) > 0);
答案 1 :(得分:0)
这适用于某些数据库,如oracle,mssql,db2
SELECT ID, Name, Sales
FROM
(
SELECT ID, Name, Sales, sum(sales) over (partition by name) sum1
FROM <table>
) a
WHERE sum1 > 0
答案 2 :(得分:0)
你可以这样做,我认为连接比()子句中的where name更有效。
SELECT Sales.name, Sales.sales
FROM Sales
JOIN (SELECT name FROM Sales GROUP BY Sales.name HAVING SUM(sales) > 0) AS Sales2 ON Sales2.name = Sales.name