带有SQL的表中具有相同引用的多个条目

时间:2013-07-04 15:37:19

标签: sql multiple-columns

在一个唯一的表中,我有多行具有相同的参考信息(ID)。对于相同的day,客户有drinkAppreciation是1(是)或0(否)。

Table 
ID   DAY Drink   Appreciation
1    1   Coffee   1
1    1   Tea      0
1    1   Soda     1
2    1   Coffee   1
2    1   Tea      1
3    1   Coffee   0
3    1   Tea      0
3    1   Iced Tea 1

我首先试图看看谁喜欢某种饮料,这显然非常简单

Select ID, max(appreciation)
from table 
where (day=1 and drink='coffee' and appreciation=1) 
or (day=1 and drink='tea' and appreciation=1)

由于我甚至对饮料不感兴趣,因此我使用max来删除重复项,并且只保留最高评价的泳道。

但我现在要做的是看看谁实际上赞赏他们喝的每一杯酒。同样,我最终对每条车道都不感兴趣,只有ID和欣赏。如何修改我的where以便在每个ID上完成它?在条件中添加ID也不是选项。我尝试为or切换and,但它不会返回任何值。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

SELECT ID
FROM table
WHERE DRINK IN ('coffee','tea') -- or whatever else filter you want.
group by ID
HAVING MIN(appreciation) > 0

它的作用是: 它寻找最小的升值,并确保该组中所有行的大于0。并且该组是ID,如group by子句中所定义。

你可以看到我正在使用having子句,因为你在where部分中不能有聚合函数。

当然,您可以根据需要将其他表连接到查询中。请注意不要通过连接添加一些不需要的过滤器,这可能会减少此查询中的数据集。