SQL group by(?)查询未按要求返回

时间:2016-04-25 22:36:50

标签: mysql sql sql-server

我有一个sql表(参见包含的.jpg)。 有些产品,如100和103的卡值为1300,但有些产品,如101,则没有。我需要创建一个SQL查询来识别没有1300卡的产品并只返回那些卡。 我的小组通过查询没有实现这一点。

4 个答案:

答案 0 :(得分:1)

select product_id
from your_table
group by product_id
having sum(card = 1300) = 0

答案 1 :(得分:1)

正如我的评论所述,你可以在没有GROUP BY条款的情况下做到这一点。 @DrunkenCodeMonkey在我整理一个SQL Fiddle以显示它的实际情况时,打败了我的答案。

select *
from products as t
where not exists (select * 
                  from products as z 
                  where z.product_id = t.product_id and z.card = 1300);

NOT INNOT EXISTS都可以使用。

答案 2 :(得分:1)

不等于<>运算符

您可以在<>条款!=中使用wheregroup by运算符

SELECT product_id
from table_name
where card <> 1300
group by product_id;

OR

SELECT product_id
from table_name
where card != 1300
group by product_id;

答案 3 :(得分:0)

这应该有效。首先获取要排除的产品ID列表,然后获取所有其他条目的行:

SELECT *
FROM MyTable
WHERE product_id NOT IN (SELECT product_id
                         FROM MyTable
                         WHERE card = 1300)

这是对MSSQL上不同方法的执行计划的比较。前两个产生完全相同的结果,但第三个,这是最接近MySQL的GROUP BY ... HAVING SUM(card = 1300)= 0,由于group by的聚合和排序肯定更贵。

enter image description here