在MYSQL按字段(Order by FIELD in MYSQL)

2019-06-21 04:26发布

我在努力解决这个问题。 我有一个这样的表。

    +-------------+-------+
    | type        | COUNT |
    +-------------+-------+
    | A           |     1 |
    | C           |     5 |
    | B           |     4 |
    +-------------+-------+

我要查询的表,其结果必然是这样的。

+-------------+-------+
| type        | COUNT |
+-------------+-------+
| A           |     1 |
| B           |     5 |
| C           |     9 |
| D           |     0 |
+-------------+-------+

查询:

select type , COUNT from TABLE order by FIELD(type,'A','B','C','D') ; 

如果列能正常工作type具有用于“A,B,C,d”的值。 在一些情况下通过顺序FIELD('A','B','C','D')的一些列可能没有在表中的值。 在这种情况下,我希望把0为它构建的结​​果。

d是不存在的表。 所以把“0”吧。

SHOW CREATE TABLE输出

CREATE TABLE `Summary` (
  `TIMESTAMP` bigint(20) NOT NULL DEFAULT '0',
  `type` varchar(50) NOT NULL DEFAULT '',
  `COUNT` bigint(19) NOT NULL,
  PRIMARY KEY (`TIMESTAMP`,`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Answer 1:

如何生根粉这一点:

select a.col as type,coalesce (`COUNT`,0) as `count`
from 
(select 'A' as col union all
select 'B' as col union all
select 'C' as col union all
select 'D' as col )a
left join Table1 T
on a.col=T.type
order by FIELD(a.col,'A','B','C','D') ; 


SQL小提琴演示



文章来源: Order by FIELD in MYSQL