mysql - 带有 IN 语句的 IFNULL 与 mysql

标签 mysql

我是 mysql 的新手....它可能看起来很麻烦....但我已经尝试了 3 个小时...这是我正在尝试做的......

SELECT
  MERCHANT_ID,
  IFNULL(COUNT(SUBSCRIBE_ID),0)
FROM SUBSCRIBE_TABLE
WHERE
  MERCHANT_ID IS NULL OR 
  MERCHANT_ID IN(1000000000066,1000000000104,1000000000103,1000000000105)
GROUP BY MERCHANT_ID
ORDER BY
  FIND_IN_SET(MERCHANT_ID,'1000000000066,1000000000104,1000000000103,1000000000105');

输出是...

+------------------+---------------------------------+
| MERCHANT_ID      |   IFNULL(COUNT(SUBSCRIBE_ID),0) |
+------------------+---------------------------------+
|    1000000000066 |                               2 |
|    1000000000103 |                               1 |
+------------------+---------------------------------+

但我期待以下列方式...

+------------------+---------------------------------+
| MERCHANT_ID      |   IFNULL(COUNT(SUBSCRIBE_ID),0) |
+------------------+---------------------------------+
|    1000000000066 |                               2 |
|    1000000000104 |                               0 |
|    1000000000103 |                               1 |
|    1000000000105 |                               0 |
+------------------+---------------------------------+

我尝试添加 MERCHANT_ID IS NULL...但无法使用默认值获得结果...:(

最佳答案

您只会获得实际在 SUBSCRIBE_TABLE 中的记录。如果您想获取所有 ID 的记录,则必须首先使用这些值“创建一个临时表”(或在这种情况下使用带有 UNION 的子查询),然后将结果加入其中.

您的查询可能如下所示:

SELECT
  merchant_id,
  COUNT(subscribe_id)
FROM
  (SELECT 1000000000066 AS merchant_id, 1 AS SortKey
   UNION ALL
   SELECT 1000000000104 AS merchant_id, 2 AS SortKey
   UNION ALL
   SELECT 1000000000103 AS merchant_id, 3 AS SortKey
   UNION ALL
   SELECT 1000000000105 AS merchant_id, 4 AS SortKey
  ) AS temp
LEFT JOIN subscribe_table USING (merchant_id)
GROUP BY merchant_id
ORDER BY SortKey ASC

我用子查询中的列 SortKey 替换了您的 FIND_IN_SETCOUNT 将只计算非空行,如果没有找到则返回 0。您不需要围绕它的 IFNULL

如果您有超过 4 个 merchant_id,您可能需要考虑使用临时表做同样的事情。有关示例,请参见此处:
Mysql: Create inline table within select statement?

关于mysql - 带有 IN 语句的 IFNULL 与 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26751232/

相关文章:

MySQL 分组依据包含

php - 我想在这种情况下在哪里有一个?

mysql - 在mysql数据库中存储瑞典语字符

mysql - 在具有多个连接的 SQL 中按商品选择最低价格

mysql - 将 SQL 文件转换为 CSV

php - 使用 PHP 对 MySQL 结果进行分组

php - 无法在 PHP、MySql 中上传 3mb+ 文件

MySQL 按字段和父项排序

python - 如何用另一种方法实现mysql left join?

mysql - 我正在尝试使用 sql 划分两个选择查询,不确定这是否可行