首页 > 解决方案 > MySql SumIF 来自另一个表而不更改值的顺序

问题描述

我希望任何人都可以帮助我完成这项任务,所以我在 MySql 数据库中有 2 个表:

Table1
+------+------------+
| Name |    Data    |
+------+------------+
| b    | 2018-11-01 |
| c    | 2018-11-01 |
| a    | 2018-11-01 |
| d    | 2018-11-01 |
| e    | 2018-11-01 |
+------+------------+

Table2
+------+------------+------------+
| Name |   Value    |    Data    |
+------+------------+------------+
| b    | Imported   | 2018-11-01 |
| c    | Activation | 2018-11-01 |
| a    | Activation | 2018-11-01 |
| b    | Activation | 2018-11-01 |
| b    | Activation | 2018-11-01 |
| d    | Activation | 2018-11-01 |
| a    | Activation | 2018-11-01 |
+------+------------+------------+

请求的输出是:

+-------+-------+
| Name  | Total |
+-------+-------+
| b     |     2 |
| c     |     1 |
| a     |     2 |
| d     |     1 |
| e     |     0 |
+-------+-------+

注意:请求表中名称的顺序应与表1中的相同。

我可以用这个查询做一个类似的结果:

Select 
   t2.Name
 , SUM(IF(t2.Value != 'Imported, 1, 0)) Total
FROM Table2 t2
WHERE t2.Data = '2018-11-01'
GROUP BY t2.Name

但结果与表 1 中的名称顺序不同,但如下所示:

+-------+-------+
| Name  | Total |
+-------+-------+
| a     |     2 |
| b     |     2 |
| c     |     1 |
| d     |     1 |
| e     |     0 |
+-------+-------+

这就是我需要 table1 的原因,仅用于名称的顺序。

如果有人可以帮助我吗?

此致!

标签: mysql

解决方案


如果这些只是元素,您可以简单地使用它:

https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_find-in-set

ORDER BY FIND_IN_SET(name, 'b,c,a,d,e');

或者你也可以使用:

场(str,str1,str2,str3,...)

ORDER BY FIND_IN_SET(name, 'b','c','a','d','e');

推荐阅读