SQL如何选择具有一个公共列但位于同一表中的行

时间:2017-02-08 14:55:08

标签: sql

我只在为具有相同商品ID的行选择数量时遇到问题。这是我的表

ID |quanti| item    | pack    |
87 | "600"| 4924592 | 5042012
115| "300"| 4924710 | 5042034
116| "300"| 4924711 | 5042034
120| "200"| 4924710 | 5042036
121| "300"| 4924711 | 5042036

我的输出应该是什么样的

300 | 4924711
300 | 4924711

所以我可以对数量求和并在子查询中使用它。

4 个答案:

答案 0 :(得分:1)

您可以使用窗口函数来获取此类重复项:

select t.*
from (select t.*, count(*) over (partition by quantity, item) as cnt
      from t
     ) t
where cnt > 1;

但简单的聚合是不是足够了?您只能获得一行而不是两行:

select quantity, item, count(*) as cnt
from t
group by quantity item
having count(*) > 1;

答案 1 :(得分:0)

看起来你想要这个:

SELECT SUM(quantity)
       ,item
FROM MyTable
GROUP BY item

如果quantity不是数字,则可能需要CAST

答案 2 :(得分:0)

取决于您使用的DBMS,但在概念上如下:

SELECT quantity, item, sum(pack), count(1) AS cnt 
FROM table
GROUP BY 1, 2
HAVING count(1) > 1;

答案 3 :(得分:0)

按table_name从table_name group中选择*;