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 的相关文章

  • mysql转储到derby

    我正在使用 derby 在 eclipse 中进行开发 是否可以从 MySQL 转储表并以某种方式将其用于 derby 我知道 ddl 和 dml 对于两个 dbms 来说是不同的 但我正在寻找一种除了转储 导出之外的合适方法 我可以找到两
  • 每月获取记录,但如果该月没有记录,则为零

    如果我有以下 SQL 表 Tests id type receiveDate 1 Blood 2012 01 18 2 Blood 2012 01 20 3 Blood 2012 01 18 4 Blood 2012 03 01 5 Blo
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 使用Perl/DBI/MySQL/InnoDB查找外键信息

    我想以编程方式查找 MySQL 数据库中特定 InnoDB 表的外键 我正在使用 Perl 我偶然发现 dbh gt foreign key info 我刚刚尝试使用它 但似乎有点错误 它不会返回 ON DELETE 和 ON UPDATE
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID
  • 错误代码:1305。函数或过程不存在

    因此 我在 MySQL 中创建一个函数 然后尝试向用户授予使用该函数的权限 但我无法这样做 这就是我正在做的 DELIMITER USE rxhelp36 scbn DROP FUNCTION IF EXISTS businessDayDi
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam
  • 将庞大数据库从亚马逊RDS导出到本地mysql

    我在 Amazon RDS 上有一个 mysql 数据库 大约 600GB 数据 我需要将其移回本地专用服务器 但我不知道从哪里开始 每次我尝试初始化 sqldump 时它都会冻结 有没有办法将其移至 S3 甚至可能在开始下载之前将其分成更
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • Mysql用in语句限制

    我正在写一个查询 SELECT user bookmarks id as user bookmark id bookmark id user bookmarks user id bookmark url bookmark website b
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • 基于mysql表中唯一电子邮件地址的唯一代码?

    我有一个 mysql 表 它将存储用户电子邮件地址 每个地址都是唯一的 并且是主字段 和时间戳 我添加了另一列名为 unique code varchar 64 utf8 unicode ci 我非常感谢您提供的帮助 a 生成5位字母数字代
  • WHERE 值不在(子查询)

    我一直在努力解决这个问题 我有两张桌子 一张带有优惠券和发票号码的 一张带有发票号码和客户姓名的 我需要找到尚未使用优惠券的顾客 以下是表格 促销表 Promotions Invoice Coupon 1 couponA 2 couponB
  • 如何从表中选择所有偶数 id?

    我想从 MySQL 数据库的表中选择所有甚至帖子 ID 然后显示它们 我还想获取所有带有奇怪 id 的帖子并将它们显示在其他地方 我想使用 PHP 来完成此操作 因为这是我使用的服务器端语言 或者 我是否必须选择所有帖子 然后使用 Java
  • 如何将自托管 WordPress 和已安装的实时站点插件升级到最新可用版本而不遇到任何麻烦?

    我必须升级正在运行的 WordPress 网站的 WordPress CMS 和一些已安装的插件 并且我想要升级的一些插件之前已被修改以实现某些目标 http easycaptures com fs uploaded 288 9522279
  • 使用 order by 和 limit 从多个表中删除

    我试图从使用 ORDER BY DESC 和 LIMIT 有关系的两个表中删除 DELETE FROM my rel table AS t1 LEFT JOIN my photo table AS t2 ON t2 typeid t1 ty
  • “完整性约束违规:1062 重复条目” - 但没有重复行

    我正在将应用程序从本机 mysqli 调用转换为 PDO 尝试将行插入具有外键约束的表时遇到错误 Note 这是一个简化的测试用例 不应复制 粘贴到生产环境中 InfoPHP 5 3 MySQL 5 4 首先 这是表格 CREATE TAB

随机推荐

  • 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 我尝试过以下查询