我是 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_SET
。 COUNT
将只计算非空行,如果没有找到则返回 0。您不需要围绕它的 IFNULL
。
如果您有超过 4 个 merchant_id
,您可能需要考虑使用临时表做同样的事情。有关示例,请参见此处:
Mysql: Create inline table within select statement?
关于mysql - 带有 IN 语句的 IFNULL 与 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26751232/