mysql - 将数据 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),
我该怎么做??
解决方案
您需要使用有条件order by
的 . 这是SQL小提琴
推荐阅读
- qt - QT5.12.3 SwipeView 枚举表单
- python - Matplotlib:增加自动生成的刻度标签之间的距离
- javascript - 基于更改功能参数的选择列表
- javascript - 在元素上切换类,忽略除一个孩子以外的所有孩子
- python - Python - 绘制带有数据间隙的numpy数组
- azure - 将 Azure 静态网站配置为不需要尾部斜杠
- java - 即使服务器错误,ResponseBuilder 也会提供 200 OK HTTP 响应
- android - Android:从“最近的应用程序”开始应用程序回到最后一个活动
- rubygems - Ruby:`require':无法加载此类文件
- excel - 为什么我的子程序在即时窗口 excel vba 中运行良好时无法工作