首页 > 解决方案 > 将数据 ASC 优先级排序为数据 not = 0

问题描述

如何将 data = 0 与 data not = 0 分开,然后对 data not = 0 ASC 进行排序,最后将 data = 0 排序。

CREATE TABLE `fruit` (
`item` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`type` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`price` int(6) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- Dumping data for table `fruit`

INSERT INTO `fruit` (`item`, `type`, `price`) VALUES
('Apple', 'Grade A', 10),
('Apple', 'Grade B', 8),
('Banana', 'Grade A', 15),
('Banana', 'Grade B', 0),
('Banana', 'Grade C', 8),
('Mango', 'Grade A', 0),
('Mango', 'Grade B', 12);
-- Indexes for dumped tables
-- Indexes for table `fruit`

ALTER TABLE `fruit`
ADD PRIMARY KEY (`item`,`type`) USING BTREE;

我尝试排序:

SELECT * FROM `fruit`
ORDER BY price DESC, item ASC

结果变成:

('Banana', 'Grade A', 15),
('Mango',  'Grade B', 12),
('Apple',  'Grade A', 10),
('Apple',  'Grade B',  8),
('Banana', 'Grade C',  8),
('Banana', 'Grade B',  0),
('Mango',  'Grade A',  0),

实际上,我只想将那些价格 = 0 推到最后,那些不 = 0 的价格将跟随主索引

我想要这样的结果:

('Apple',  'Grade A', 10),
('Apple',  'Grade B',  8),
('Banana', 'Grade A', 15),
('Banana', 'Grade C',  8),
('Mango',  'Grade B', 12),
('Banana', 'Grade B',  0),
('Mango',  'Grade A',  0),

我该怎么做??

标签: mysql

解决方案


您需要使用有条件order by的 . 这是SQL小提琴


推荐阅读