0

我有下表:

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

这可能吗?

4

3 回答 3

2

您可以使用 HAVING 子句轻松获取销售额总和大于 0 的人员的姓名:

select name
from yourtable
group by name
having sum(sales) > 0;

此查询将同时返回Simonand Anna,然后如果您想返回每个名称的所有详细信息,您可以在 WHERE 子句中使用上述内容来获得最终结果:

select id, name, sales
from yourtable
where name in (select name
                from yourtable
                group by name
                having sum(sales) > 0);

请参阅SQL Fiddle with Demo

于 2013-08-21T14:12:12.150 回答
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
于 2013-08-21T14:15:14.773 回答
0

你可以这样,我认为 join 会比 where name in() 子句更有效。

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
于 2013-08-21T14:18:11.760 回答