MySQL - 组中的条件选择

标签 mysql sql select group-by conditional-statements

我有一个包含几行的简单表格,我想按 id_room 对它们进行分组,并且仅当条件为真时才选择值。问题是即使有一行包含正确的日期列 year_month,条件也始终为假。

这是架构:

CREATE TABLE tbl_account_room (
  `id` int, 
  `year_month` date, 
  `value` int,
  `id_room` int
);

INSERT INTO tbl_account_room
    (`id`, `year_month`, `value`, `id_room`)
VALUES
    (1, '2016-08-01', 1, 300),
    (2, '2016-09-01', 2, 300),
    (3, '2016-10-01', 3, 300);

这里查询:

SELECT 
  (case when '2016-10-01' = ar.year_month then ar.value else 0 end) as total
FROM tbl_account_room AS ar
WHERE ar.year_month >= "2016-08-01"
  AND ar.year_month <= "2016-11-01"
  and ar.id_room = '300'
GROUP BY ar.id_room
LIMIT 10

这里是 SQL Fiddle

total 列中,我得到 0,我想得到值 3,因为 year_month2016-10-01。为什么会这样?

最佳答案

您当然不需要那个CASE 条件并将该条件包含在您的WHERE 子句中而不是像

SELECT 
ar.value as total,
GROUP_CONCAT(ar.year_month)
FROM tbl_account_room AS ar
WHERE ar.year_month = '2016-10-01'
GROUP BY ar.id_room;

关于MySQL - 组中的条件选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40803501/

相关文章:

mysql - 仅第一个开始日期和最后一个完成日期

php - 将 "with\"替换为 Dotrine 1.2

Javascript:以编程方式将非弹出式 SELECT 元素滚动到 Chrome 中的底部

postgresql - SELECT 语句中的 SQL 语句 If 语句

mysql - 从 TomCat Web 服务访问 MySQL - 找不到合适的驱动程序

c# - 为什么 MySql 表名区分大小写?

mysql - 用于统计所有 child 论坛主题和帖子的 SQL 查询

C# .NET 生成一次字符串数组,其索引是表中的字符串值

javascript - 当我添加新数组时, "A"不断添加到多维数组的开头。知道是什么原因造成的吗?

sql - 如何在每个 id 组的列中选择最频繁的值?