MySQL:如何对 ORDER BY 子句使用 CASE

2023-12-06

我有一个存储过程,必须在根据输入过滤行后返回一个表。其中两个输入是sort_column and sort_dir。查询必须 ORDER BYsort_column in the sort_dir方向(ASC 或 DESC)。

我尝试过以下查询但没有成功。下面的查询已被简化为仅包含相关条款。其他过滤器工作正常,没有任何问题。

  1. SELECT * FROM table ORDER BY sort_column sort_dir
  2. SELECT * FROM table ORDER BY CASE sort_column WHEN 'col1' THEN col1_name WHEN 'col2' THEN col2_name END CASE sort_dir WHEN 'asc' THEN ASC ELSE DESC END

  3. 我以 _ 格式将 2 个输入连接到 1 个输入并尝试了以下操作:

    SELECT * FROM table ORDER BY CASE sort_input
      WHEN 'col1_asc' THEN col1_name ASC
      WHEN 'col1_desc' THEN col1_name DESC
      WHEN 'col2_asc' THEN col2_name ASC
      WHEN 'col2_desc' THEN col2_name DESC END
    

我总是收到错误#1064。上述每种情况下它都不同,但始终指向“CASE”部分。这是上面提到的选项 2 的错误

##1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 4 行 'WHEN 'col1' THEN col1_name END CASE 'asc' WHEN 'desc' THEN DESC ELSE ' 附近使用的正确语法

问题似乎不是列名。这是不起作用的排序方向。如果我在没有“ASC”和“DESC”部分的情况下尝试上述每个选项,则没有问题。

我在这里做错了什么吗? 除了 CASE 之外还有更好的方法吗?

MySQL版本:5.6


最好的方法是多种cases:

ORDER BY (CASE WHEN sort_input = 'col1_asc' THEN col1_name END) ASC,
         (CASE WHEN sort_input = 'col1_desc' THEN col1_name END) DESC,
         (CASE WHEN sort_input = 'col2_asc' THEN col2_name END) ASC,
         (CASE WHEN sort_input = 'col2_desc' THEN col2_name END) DESC,

这可能看起来很冗长。但是,请记住CASE是一个返回单个值的表达式。因此你不能包括ASC and DESC作为THEN.

同样重要的是数据类型的问题。 SQL 编译器决定单一类型CASE表达。当列具有不同类型时,这可能会导致意外问题。

最简单的解决方案就是使用多个CASE表达式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL:如何对 ORDER BY 子句使用 CASE 的相关文章

  • 您可以使用 PDO 将占位符放入查询的选择部分吗?

    我打算使用 PDOprepare and execute 防止SQL注入攻击的机制 通常 SQL 中的占位符位于条件部分 例如select name age from members where age gt and gender f 但是
  • 用户消息系统

    我正在考虑创建一个用户消息系统 类似于 Facebook 我想知道的本质上是表结构应该是什么样子 我的要求如下 消息在用户之间交换 发送者可以选择多个用户来发送消息 消息以线程式布局显示 作为一对一对话 即每个收件人的回复将出现在其自己的线
  • 在 Python 中捕获 MySQL 警告

    我想用 Python 捕获并记录 MySQL 警告 例如 如果您提交 MySQL 会向标准错误发出警告 DROP DATABASE IF EXISTS database of armaments 当不存在这样的数据库时 我想捕获并记录它 但
  • 私人消息系统。列出每个对话的最后一条消息

    可以说这是数据库结构 SELECT FROM pms where id to 1 or id from 1 这将返回他已接收或发送的所有消息 那么我如何检索最后一条消息each用户1可能进行的对话 PD 当两个用户之间存在一条或多条消息时
  • 从 PHP PDO 执行时 MySQL 提交是否同步?

    使用 MySQL 的 PHP PDO 接口 假设我有以下代码来结束事务 假设它已正确开始 pdo gt query commit 当函数返回时 对日志的写入是否已刷新 也就是说 事务是否已提交 或者我只是提出了提交请求 假设我没有设置任何延
  • Java长到MySQL

    Java相当于什么long在 MySQL 的上下文中数据类型 SIGNED BIGINT http dev mysql com doc refman 5 0 en numeric types html是一个 8 字节长的整数 就像 Java
  • 如何让 YEARWEEK() 将星期日视为一周的开始?

    我试图让 YEARWEEK 函数将星期日视为一周的第一天 日期示例为 2009 年 3 月 1 日星期日 这是我的sql SELECT YEARWEEK 2009 03 01 结果是 gt 200909 这是第 9 周 我相信它告诉我这是第
  • Sequelize 中的 FOR SHARE 和 FOR UPDATE 语句

    当我们使用事务时 常规 SQL 查询可以包含 SELECT FOR SHARE 和 SELECT FOR UPDATE 语句 有没有办法用 Sequelize 设置相同的语句 我还没有找到这些选项 也许有一些技巧 需要什么 您可以在这里阅读
  • Ubuntu:无法通过套接字“/var/run/mysqld/mysqld.sock”连接到本地 MySQL 服务器 (2)

    我有 Ubuntu 14 04 安装了 LAMP 并运行 Owncloud 的服务器 我尝试安装文书工作 https github com twostairs paperwork wiki Installing Paperwork on U
  • ImportError:没有使用 Python3 的名为 mysql.connector 的模块?

    尝试导入python mysql connector on Python 3 2 3并收到奇数堆栈 我怀疑我的 ubuntu 12 04 安装配置错误 vfi ubuntu usr share pyshared python3 Python
  • mysql查询获取根父级

    我的表中有以下数据categories id parent id title 1 0 A 2 1 B 3 2 C 4 3 D 5 4 E 现在我想获取类别 id 4 的根类别标题 parent id 0 即标题 A 的类别 id 1 如何在
  • 无法将 MYSQL 备份恢复到新数据库

    我成功创建了一个mysqldump file myDump sql of a myDb1数据库使用指南this https stackoverflow com questions 105776 how do i restore a mysq
  • 如何使用Hibernate从Mysql获取最后一条记录?

    List
  • 在php mysql排行榜表中显示用户排名?

    我创建了一个测验页面 将登录用户的测验结果存储到排行榜 我有一个名为 Members 的表 其中包含 user 和 quiz score 列 我根据登录用户进行的测验结果打印出排行榜 我在个人资料页面的排行榜中显示特定用户的位置时遇到问题
  • 连接超时:Nodejs Google App Engine 到 Cloud MySql

    该代码非常基础 使用 mysql 的简单 Nodejs 应用程序 Error connect ETIMEDOUT当代码尝试连接到 Google App Engine 上的 Google Cloud MySql 服务器 第二代 时收到 但是应
  • SourceTree 中通过 textconv 自定义差异

    我正在尝试比较和合并 SourceTree 中的 MySQL WorkBench 文件 为此 我创建了一个小型 shell 脚本 用于提取 mwb 文件的内容 并从其中的 XML 文件中删除一些无用的计数器 然后我将此行添加到项目根目录中的
  • PHP 中的依赖注入

    我一直在研究依赖注入 我是在关注某件事还是完全没有关注 代码是好是坏 依赖注入与否 下面的代码是CMS系统的基础 现在有一个名为 page details 的表 其中存储了所有网页 目录 文件结构 htaccess index php cl
  • 在实时计算机上更新(或替换)整个数据库表的最佳方法是什么?

    我每周都会收到一个数据源 我将对其进行解析并放入数据库中 数据每周不会有太大变化 但我应该定期更新数据库 除了每周更新外 数据是静态的 目前重建整个数据库不是问题 但最终该数据库将上线 人们可以在我重建数据库时查询该数据库 数据量并不小 几
  • mysql中的保存点提交回滚[重复]

    这个问题在这里已经有答案了 我们如何在mysql中使用提交 回滚和保存点 CREATE TABLE t test id INT NOT NULL PRIMARY KEY ENGINE InnoDB START TRANSACTION INS
  • Django MySQL 创建表时出错

    我有一个类似的问题这张票 https code djangoproject com ticket 18256在 Django 论坛上提出 我该如何解决这个问题 我还扩展了一个用户模型 如下所示 class Profile models Mo

随机推荐

  • Powershell - 等待输入 10 秒 [重复]

    这个问题在这里已经有答案了 inputYN Read Host defaults to y in 10 sec y n 如果用户在 10 秒内没有提供任何输入 则默认 inputYN应转到 是 并继续执行下一个任务 你的问题引起了我的兴趣
  • java swing JTextField 设置 PlaceHolder [重复]

    这个问题在这里已经有答案了 我创建了一个 JTextField 现在我想在该 JTextField 上设置占位符 但我不知道如何 请帮忙 这是我的代码 JTextField database new JTextField Enter Dat
  • 使用 PyAudio 进行流式传输时修改音量

    我正在尝试流式传输 WAV 文件 同时剥离其中一个声道 因此它仅在一个扬声器上播放 同时降低音量 我使用 PyAudio 的原因是我必须能够 一次传输多个文件 从特定扬声器 左 右 播放声音 中断声音文件的播放 并且无法找到任何其他允许这些
  • Visual Studio 2015 社区中缺少通用应用程序模板

    我仍然无法在已安装的 Visual Studio 2015 Community 中创建新的通用应用程序 我认为原因是我运行的是 Windows 8 1 今天我升级到Windows 10 但没有可用的 通用应用程序 模板 我已经安装了 Win
  • 使用 Grails 在电子邮件中发送图像

    我正在使用 Grails邮件插件发送电子邮件 我想在电子邮件正文中发送图像 而不是作为附件 我想要的是图像显示在电子邮件正文本身中 就像在新闻通讯中一样 我试过 img style display block height 100px wi
  • git push --force,在幕后

    当你使用 force 进行 git push 时到底会发生什么 我已经在网上搜索了大约一个小时 我能找到的最相关的答案是 Same as git push but force the push even if it results in a
  • 如何将列表项从字符串转换为整数?

    我有一个字符串列表列表 如下所示l 1 2 3 4 5 6 2 3 2 3 4 我想从第 2 项开始将列表视为 int 以下代码实现了目的 但没有将列表项转换为 int gt gt gt l i 2 for i in range len l
  • 在管理中列出过滤器和搜索结果

    在我覆盖之后get search results方法 list filter不起作用 但搜索字段按我的预期工作 class NaruceniProduktiAdmin admin ModelAdmin search fields broj
  • 使用 Eloquent/Raw Laravel 查询的 Group Concat

    我有一个以 Eloquent 形式存储的对象结构 item id 2 item color Black item size L item Quantity 5 item id 2 item color Black item size M i
  • 为什么将列表转换为集合比将生成器转换为集合更快?

    这是一个例子 gt gt gt from timeit import timeit gt gt gt print timeit y for y in range 100 number 100000 0 7025867114395824 gt
  • 简单的素数程序 - 线程 C# 的奇怪问题

    这是我的代码 using System using System Collections Generic using System Linq using System Text using System Threading namespac
  • 删除工作表/图表事件 VBA

    我试图在删除工作表 Excel 时触发宏 自 2010 年以来 出现了不同的删除事件 应用程序级别 Application SheetBeforeDelete 事件 工作簿级别 Workbook SheetBeforeDelete 事件 工
  • 在Shiny R中,有没有办法在observeEvent之后立即运行observeEvent而没有延迟(renderUI的问题)?

    好吧 我的标题有点令人困惑 但让我解释一下 我正在使用 renderUI 来获取音频标签 但是 我想以较低的音量启动音频 因为它太大声了 下面的代码工作正常 除了因为我添加了延迟 它以较高的音量开始 然后迅速转到较低的音量 但它仍然非常明显
  • 世博会开发者菜单未显示

    我正在使用 expo 工具并进行原生反应 没有任何问题 但在我的模拟器上升级 Expo Go 应用程序后 出现了问题 开发者菜单不会像以前那样显示 并且菜单中的项目不会显示 我的expo go版本 2 25 1 我正在使用 Genymoti
  • 张量流成本函数是张量,而不是标量 - 为什么?优化失败

    以下代码可以运行 但不起作用 变量cost总是一个充满 1 0 的张量 但为什么呢 我估计了一个标量 因为 1x5 矩阵乘以 5x1 矩阵就是一个标量 优化时偏差和权重也不会改变 我究竟做错了什么 KI Model x tf placeho
  • luasocket的问题

    我试图从 lua 套接字读取一些 二进制 数据 但上面的代码不会终止重复循环 我如何知道流已到达末尾 client require socket client socket connect www google com 80 client
  • 将(自定义)解码器添加到 WebMVC 端点

    我有一个 WebMVC 端点 RequestMapping path execution id method RequestMethod POST public ResponseEntity lt gt execute PathVariab
  • Android socket.io 在不丢失连接的情况下切换活动

    我开发了一个游戏 它将使用socket io连接 我的服务器是用node js编写的 我的android客户端使用socket io 现在 我的问题是 我如何在不失去与服务器连接的情况下切换活动 我至少有 4 个活动 聊天 游戏视图 在线玩
  • Cordova ios 上的 Ajax 调用 SecurityError: DOM Exception 18

    您好 我正在通过 Cordova 5 1 1 Phonegap 构建 iOS 应用程序 但有一个无法解决的问题 A basic Ajax调用抛出一个SecurityError DOM Exception 18我尝试了有关白名单的所有技巧 但
  • MySQL:如何对 ORDER BY 子句使用 CASE

    我有一个存储过程 必须在根据输入过滤行后返回一个表 其中两个输入是sort column and sort dir 查询必须 ORDER BYsort column in the sort dir方向 ASC 或 DESC 我尝试过以下查询