【问题标题】:mysql check if value exist in groupmysql 检查组中是否存在值
【发布时间】:2013-01-15 14:29:47
【问题描述】:

我有一个名为votes 的表,其中包含id、image_id、user_id 和time 列。

如果特定 user_id 是每个 image_id 的投票之一,我如何在结果中添加布尔值?

SELECT image_id,
count(image_id) as vote_count
FROM votes
GROUP BY image_id 
ORDER BY vote_count DESC

我尝试过if(user_id = 18, 1, 0) as have_voted,但它不适用于每个image_id。

【问题讨论】:

  • 我不太明白你想收集什么。由于您是按图像 ID 聚合的,因此您会丢失用户 ID 中的特定行。听起来您可能想要使用“IN”子句?
  • 我需要票数并知道当前用户是否为每张图片投票。

标签: mysql sql group-by aggregate


【解决方案1】:

将user_id 是您想要的行的所有行相加,然后检查该总和是否大于0?

SELECT image_id,
count(image_id) as vote_count,
SUM(IF(user_id = 18,1,0)) > 0 AS hasUser18
FROM votes
GROUP BY image_id 
ORDER BY vote_count DESC

【讨论】:

  • 一个更简单的表达式是max(user_id = 1)。
  • 谢谢,这是我想要的。 sum(user_id = 1) 和 max(user_id = 1) 也这样做了
  • 我很想看看SUM(IF(user_id = 18,1,0)) vs sum(user_id = 1) vs max(user_id = 1) 的表现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2014-11-29
相关资源
最近更新 更多