MySQLのORDER BY IF()条件ソート

ソース

問題のSQLの並べ替えが発生し、sqlzooをやって、彼は個々の行はクエリ結果の先頭に配置することができます資格、または尾の結果

メソッド内のステートメントは、(また、IF文で)です

 

これは、すべての目次であるように私は、テストを持っていたと思います

 

IF文を使用してフィットBY ORDER

例えば、私はヘビの種に行数は、別途記載されていると思うので、私は問い合わせることができます

(0,1、種= '蛇')もしBYペットORDER SELECT * FROM、種;

結果は以下の通りであります

私たちは、ヘビの種のための行数は、強制的にクエリ結果の先頭に置かれたことがわかります

これはそれを行う方法ですか?

それは注意する必要があります。

IF(種= '蛇'、0,1)種;

これが意味するI種の種、種はに接続しながら、ということである隠し属性、隠し属性が可能0または1

それは何を意味するのでしょうか?すなわち、優先度が種ヘビかどうかを決定することである種の一種であり、そうである場合、返されない場合は、リターン0 1。

次に、実行するために種を属性隠された一種の、隠し属性の撮影の後、その後、残りの種を並べ替えます

言い換えれば、あなたは別の列と見られ、この文を、置くことができる場合

 

私たちは蛇にの結果に行の末尾をしたい場合は?

その後、SELECT IF(種= '蛇'、0、1)BY ORDER * PETからの書き込みができDESC、種を。

いくつかは、上記に述べたように、あなたは別の列とif文を置くことができ、あなたも彼のためにASCまたはDESCのソート条件を追加することができますので、もちろん、デフォルトはASCで、書き込むことはできません。

したがって、最初のステップは、クエリに相当するクエリ0,1隠し属性、次いでDESCソート種=ヘビ戻り値は0、それは最終的にランクされている逆の順序であるからです

 

 

だから、あなたが同時に隠し属性の優先順位付けを行っている、一種の残りのために、あなたはまた、さらにソートのASCまたはDESC、ないスクリーンショットすることができます。

 

 

文の順にして使用します

上記単一の条件は、リターン0または1満たされ、あなたはそれの範囲を使用する必要がある場合に?あなたは、INステートメントを使用することができます

次のような、私は誕生日や行1993年2月4日1989年5月13日の数、および最後の行を尋ねました

BYペットORDER SELECT * FROM 誕生INに( '1993年2月4日'、 '1989年5月13日')、誕生。

この場合、のINステートメント裁判官の誕生、出産条件が満たされた場合、リターンが満たされていない、0を返します。

戻り値が1、ASCをソートするための時間であるので、したがって、2つのラインの状態は、それが最終的に配置されています。

 

 

================================================== ======================================

照会アクセス・条件によってオーダー

 适用场景,如表tab_a 有三个字段,

                          如果field1非空则按升序排列,

                               如果field1是空再排field2,

                                       如果 field2非空升序排列,

如果field2是空再排field3,

如果field3非空则升序排列,

如果field3是空。。。。。。。。



例子1    排序boolean类型

CREATE TABLE `tab_b` (
  `field` varchar(255) default NULL,
  `id` int(11) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `tab_b` VALUES ('1', 'ture');

INSERT INTO `tab_b` VALUES ('2', 'ture');

INSERT INTO `tab_b` VALUES ('3', 'false');

INSERT INTO `tab_b` VALUES ('4', 'false');


SELECT * from TAB_B ORDER BY  field='true' desc



注意:ORDER  by 后接的字段如果是boolean属性,则false比ture ‘大’!!!!!

                  

########################################################

DROP TABLE IF EXISTS `tab_a`;
CREATE TABLE `tab_a` (
  `id` int(11) NOT NULL,
  `field3` int(11) default NULL,
  `field2` int(11) default NULL,
  `field1` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `tab_a` VALUES ('1', '1', '1', '1');
INSERT INTO `tab_a` VALUES ('2', '2', '2', '2');
INSERT INTO `tab_a` VALUES ('3', '3', '3', null);
INSERT INTO `tab_a` VALUES ('4', '4', null, null);
INSERT INTO `tab_a` VALUES ('5', '5', '5', null);
INSERT INTO `tab_a` VALUES ('6', null, null, null);
INSERT INTO `tab_a` VALUES ('7', null, null, null);
INSERT INTO `tab_a` VALUES ('8', '8', null, null);

SELECT  * FROM TAB_A  ORDER BY
  field1='' desc , field1 asc,
  field2='' desc , field2 asc,
  field3='' desc  ,field3 asc



            此处field1='' 可以看成boolean排序  desc 排序,field1=''为真的排在下面(因为看上面"注意"),否则排在上面(即field1!='');

                  而后面的field1 asc相当于排序field1!=''数据,依次排序field2,field3..........
---------------------
作者:changliangwl
来源:CSDN
原文:https://blog.csdn.net/changliangwl/article/details/42777551
版权声明:本文为博主原创文章,转载请附上博文链接!

おすすめ

転載: www.cnblogs.com/xiaoshen666/p/11004983.html