MySQL在结果的顶部放置了一个特定的行

时间:2017-09-20 15:29:12

标签: mysql sql

我正在做一个基本的SQL select查询,它返回一组结果。我想要一个特定的行,其中的条目是"费"把它放在结果的顶部,然后是其余部分。

类似的东西:

SELECT * FROM tbl ORDER By Charges = Fee DESC, Charges DESC

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

你可以试试这个:

SELECT * from tbl ORDER BY CASE WHEN Charges = 'Fee' THEN 0 ELSE 1 END, Charges DESC;

答案 1 :(得分:0)

我认为你有一个使用UNION查询。据我所知,ORDER BY默认不支持此类事情。

这样的事情:

SELECT * FROM tbl WHERE Charges = 'Fee'
UNION
SELECT * FROM tbl ORDER BY Charges DESC

答案 2 :(得分:0)

您必须使用ORDER BY FIELD属性,然后按首先排序。

由于我没有您的表格定义,我在这里抛出一个http://sqlfiddle.com/#!9/91376/13

为了消失,脚本几乎包括;

CREATE TABLE IF NOT EXISTS `tbl` (
  `id` int(6) unsigned AUTO_INCREMENT,
  `Name` char(6) not null,
  `Charges` char(10) NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

INSERT INTO `tbl` (`Name`, `Charges`)
     VALUES ('One', 'Fee'), ('Two', 'Charge'), ('Three', 'Charge'), 
            ('Four', 'Charge'), ('Five', 'Fee'), ('Six', 'Fee'), 
            ('Seven', 'Invoice'), ('Eight', 'Fee'), ('Nine', 'Invoice'), 
            ('Ten', 'Invoice');

    SELECT *
      FROM tbl
  ORDER BY FIELD(`Charges`, 'Charge') DESC
           ;

返回:

id  Name    Charges
2   Two Charge
3   Three   Charge
4   Four    Charge
1   One Fee
9   Nine    Invoice
8   Eight   Fee
7   Seven   Invoice
6   Six Fee
5   Five    Fee
10  Ten Invoice

因此,要直接回答您的问题,您的查询将是;

  SELECT * 
    FROM tbl
ORDER BY FIELD(Charges, 'Fee') DESC

修改:可查看,按Charges = Fee排序:http://sqlfiddle.com/#!9/91376/15

答案 3 :(得分:0)

SELECT * FROM tbl ORDER By FIELD(Charges, 'Fee') DESC

您可以使用类似上面的内容。其中Charges是字段,fee是特定值。这样一来,您就可以保持简单。