GROUP BY DESC 如何选择顺序?

2023-11-29

所以我正在为一家商店创建部分。如果没有,商店可以有多个范围section_identifier为给定设置store_id它应该回退到全局商店0.

我想要的 SQL 命令应该返回一个列表section_options对于任何相关的给定商店。

我的表的示例:

SELECT * FROM my_table:

+----+--------------------+----------------------+----------+
| id | section_identifier | option_identifier    | store_id |
+----+--------------------+----------------------+----------+
| 17 | header             | header_option_one    |        1 |
| 18 | footer             | footer_option_one    |        0 |
| 19 | homepage_feature   | homepage_feature_one |        0 |
| 23 | header             | header_option_three  |        0 |
| 25 | homepage_feature   | homepage_feature_one |        1 |
+----+--------------------+----------------------+----------+

So section_identifier是唯一的,我需要为商店 1 返回的 ID 是 17、18 和 25。

当我跑步时:

SELECT * FROM my_table GROUP BY section_identifier它返回:

+----+--------------------+----------------------+----------+
| id | section_identifier | option_identifier    | store_id |
+----+--------------------+----------------------+----------+
| 18 | footer             | footer_option_one    |        0 |
| 23 | header             | header_option_three  |        0 |
| 19 | homepage_feature   | homepage_feature_one |        0 |
+----+--------------------+----------------------+----------+

这意味着如果我跑SELECT * FROM my_table GROUP BY section_identifier DESC:

我得到响应(这是我想要的输出):

+----+--------------------+----------------------+----------+
| id | section_identifier | option_identifier    | store_id |
+----+--------------------+----------------------+----------+
| 25 | homepage_feature   | homepage_feature_one |        1 |
| 17 | header             | header_option_one    |        1 |
| 18 | footer             | footer_option_one    |        0 |
+----+--------------------+----------------------+----------+

虽然这有效,但我不明白为什么。

这是我最初的理解GROUP BY应该得到数据库中的第一个实例,即我期望的响应应该是:

+----+--------------------+----------------------+----------+
| id | section_identifier | option_identifier    | store_id |
+----+--------------------+----------------------+----------+
| 18 | footer             | footer_option_one    |        0 |
| 17 | header             | header_option_three  |        1 |
| 19 | homepage_feature   | homepage_feature_one |        0 |
+----+--------------------+----------------------+----------+

不过,它似乎引用了我的store_id不知何故?我尝试了几种不同的组合,每次都奇怪地得到我预期的结果,但我不明白为什么。

有人可以向我解释一下吗?

PS

我已经尝试更新option_identifier of id = 7查看 MySql 是否引用磁盘上最新保存的数据并且它没有改变结果。

Also:我不打算使用此功能或寻求替代方案,我是想问它是怎么回事?


SELECT * FROM my_table GROUP BY section_identifier

是无效的SQL query.

How GROUP BY works?

让我们获取上面的查询,看看如何GROUP BY作品。首先,数据库引擎选择所有匹配的行WHERE条款。没有WHERE此查询中的子句;这意味着表的所有行都用于生成结果集。

然后,它使用在中指定的表达式对行进行分组GROUP BY clause:

+----+--------------------+----------------------+----------+
| id | section_identifier | option_identifier    | store_id |
+----+--------------------+----------------------+----------+
| 17 | header             | header_option_one    |        1 |
| 23 | header             | header_option_three  |        0 |
+----+--------------------+----------------------+----------+
| 18 | footer             | footer_option_one    |        0 |
+----+--------------------+----------------------+----------+
| 19 | homepage_feature   | homepage_feature_one |        0 |
| 25 | homepage_feature   | homepage_feature_one |        1 |
+----+--------------------+----------------------+----------+

我在上面的列表中标记了各个组,以使一切都清楚。

下一步,数据库引擎从每个组中生成单行。但如何呢?

The SELECT您的查询的子句是SELECT *. *代表表列的完整列表;在这种情况下,SELECT *是一个简短的写法:

SELECT id, section_identifier, option_identifier, store_id

我们来分析一下列的值id对于第一组。数据库引擎应该选择什么值id? 17 or 23? Why 17以及为什么23?

它没有任何支持的标准17 over 23。它只是选择其中之一(可能17但这取决于很多内部因素)并且是其中之一。

确定其值没有问题section_identifier。这是用来GROUP BY,它在一组中的所有值都相等。

选择困境再次出现在专栏上option_identifier and store_id.


根据标准SQL您的查询无效并且无法执行。但是,某些数据库引擎按上述方式运行它。不存在的表达式的值(至少以下之一):

  • 用在GROUP BY clause;
  • 与一起使用GROUP BY聚合函数 in the SELECT clause;
  • 功能上依赖于所使用的色谱柱GROUP BY clause;

是不确定的。

自版本以来5.7.5, MySQL实施功能依赖性检测并且默认情况下,它会拒绝无效的GROUP BY像你一样查询。

如何让它发挥作用

我不清楚你想如何获得结果集。无论如何,如果你想从表中获取一些行GROUP BY is not正确的做法。GROUP BY does not从表中选择行,它会使用表中的值生成新值。生成的行GROUP BY大多数时候,不匹配源表中的任何行。

您可以在以下位置找到问题的可能解决方案这个答案。在阅读并理解这个想法之后,您必须自己编写查询(并且您非常清楚应该如何选择“获胜”行)。

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

GROUP BY DESC 如何选择顺序? 的相关文章

  • 使用 Hibernate 在 MySQL 中存储字节数组

    我正在尝试保存带有字节数组字段的实体 我在 MySQL 数据库之上使用 Hibernate 和 JPA 这是字段定义 对于嵌入式 H2 数据库来说效果很好 Entity name blob public class Blob Lob Bas
  • HTAccess - 令人困惑的干净网址

    如果我想简单地重定向 clients page to clients php view page我会使用像这样简单的东西 它效果很好 Options FollowSymlinks RewriteEngine on RewriteRule c
  • Hibernate 可以使用 MySQL 的“ON DUPLICATE KEY UPDATE”语法吗?

    MySQL 支持 INSERT ON DUPLICATE KEY UPDATE 语法允许您 盲目 插入数据库 并回退到更新现有记录 如果存在 当您想要快速事务隔离并且想要更新的值取决于数据库中已有的值时 这非常有用 作为一个人为的示例 假设
  • MySQL 导入 125000 行 CSV 的最快方法?

    这是我第一次使用 MySQL 除了对现有数据库进行一些基本查询之外 所以我不擅长解决这个问题 我有一个包含 125 000 条记录的 CSV 我想将其加载到 MySQL 中 我安装了版本 8 和工作台 我使用导入向导加载 CSV 它开始导入
  • Java 从 SQL 数组获取 ResultSet 失败

    我试图从数据库中检索电子邮件地址 但没有成功 我的代码如下 Main System out println PortfolioData getEmails 58 So Far Returning null 投资组合数据 public sta
  • 通过我的java代码导出数据库

    我想使用我的 java 代码导出我的 MySQL 数据库 但我还没有找到任何办法 我想要做的就是我的应用程序中有一个按钮作为 导出数据库 单击该按钮时 我的数据库应导出到指定的路径 我使用了以下代码 但它不起作用 Runtime runti
  • SQL 检查一组日期是否在指定的日期范围内

    我有一个表 其中保存架构中房间不可用的日期 ROOM ID DATE UNAVAILABLE 我需要一个 sql 查询来检查两个日期范围内是否有可用房间 类似于 Select All rooms that are constantly av
  • 如何将 MySQL 数据库更改为 UTC?

    我使用的是 Windows 7 对数据库方面的东西有点陌生 我尝试在 Google 上搜索如何将系统时区更改为 UTC 但文档有些高级 我不太确定如何更改此字段 在 my ini 文件的 mysqld 部分下 添加以下行 default t
  • 如何以最少的查询次数获取帖子列表和关联标签

    我的表格结构如下 标签 更多的是一个类别 id 标签名称 描述 slug POSTS ID 标题 网址 邮戳 id idPost idTag USERS ID 用户名 userSlug VOTES id idPost idUser 每个帖子
  • 在 MacOSX10.6 上运行 python 服务器时 MySQLdb 错误

    运行我的服务器 python manage py runserver 产生以下错误 django core exceptions ImproperlyConfigured 加载 MySQLdb 模块时出错 没有名为 MySQLdb 的模块
  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • Mysql innoDB 不断崩溃[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的数据库 mysql 服务器不断崩溃 重新启动 我不知道该怎么办 我不断在 dbname org err 文件中收到以下内容 13120
  • 为什么 MySQL 创建带有 _seq 后缀的表?

    我创建了一个 InnoDB 表 名为foo在 MySQL 中 一旦我对表执行插入操作 我就会看到另一个表foo seq被建造 如果我删除自动生成的表 它会在下一次插入后出现 是什么原因造成的 听起来像是正在创建一个序列 您是否有自动生成的主
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB
  • Hibernate 对集合的查询过滤器

    我想执行以下查询 from Item i where i categoryItems catalogId catId 然而 这会产生以下异常 非法尝试取消引用集合 所以我用谷歌搜索 找到了这个 Hibernate 论坛帖子https for
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)

    当我尝试连接 mysql 时出现以下错误 Can t connect to local MySQL server through socket var lib mysql mysql sock 2 这个错误有解决办法吗 其背后的原因可能是什
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com

随机推荐

  • 如何在这个 ubuntu 终端命令中仅引用一次 Main:“javac Main.java && java Main”?

    我正在审查许多不同的 java 程序 并试图找出如何仅更新对程序名称的引用一次而不是两次 有没有办法在单个终端命令中使用变量 S 我试图改进的命令是这种形式 javac Main java java Main 我只想更改对 Main 的引用
  • 异步加载 - UITableView 和 Firebase

    我正在开发一个从 Firebase 加载列表数据并填充 UITableView 的项目 虽然我看到从我的 firebase 实例调用快照 但它们不会填充表 而本地同步 NSMutableArray 显示内容 如何让 UITableView
  • 使用 Python 3.x 还是 2.x? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 几个月前我开始学习 Pyt
  • python3.x 多处理循环没有“if __name__ == '__main__':”

    我有这个文件 它没有任何有用的工作 仅用于学习 import multiprocessing sys def parent numproc 2 print at start childs print bfore Pipe parentEnd
  • @ManagedBeans 在 JavaEE6 中是否因为 CDI/Weld 中的 @Named 而过时?

    由于 CDI 及其实现 Weld JEE6 中的每个 POJO 都可以用 Named 这使得视图可以访问 POJO 这是否意味着 ManagedBeans 现在已经完全过时了 或者我错过了什么地方 ManagedBean还有道理吗 简而言之
  • 通过键连接多个 Kafka 主题

    如何编写一个以可扩展的方式加入多个 Kafka 主题的消费者 我有一个主题发布带有密钥的事件 第二个主题发布与具有相同密钥的第一个主题的子集相关的其他事件 我想编写一个订阅这两个主题并为两个主题中出现的子集执行一些附加操作的消费者 我可以使
  • Spark:将大文件写入 HDFS 时不允许自我抑制

    我正在使用 Spark 将一个大文件写入 HDFS 基本上我所做的就是加入 3 个大文件 然后使用 toJSON 将结果数据帧转换为 json 然后使用 saveAsTextFile 将其保存到 HDFS 最终写入的文件大约为 4TB 应用
  • Java 8 LocalDate 不会解析有效的日期字符串[重复]

    这个问题在这里已经有答案了 这里是 Java 8 我有以下代码 final String createdDateStr 20110920 final DateTimeFormatter formatter DateTimeFormatter
  • Mac OS X 中的应用程序更新

    要在 Windows 中提供应用程序更新 我们只需下载安装程序并运行它即可 应用程序安装在 PROGRAMFILES 中 快捷方式放置在不同的地方 键和值被添加到注册表中 以在系统的程序列表中提供一个条目 为了在Linux中提供应用程序更新
  • 使用条件逻辑从 pandas df 创建多个列表[重复]

    这个问题在这里已经有答案了 我有一个看起来像这样的 df var1 var2 var3 0 a 1 0 b 7 0 c 5 0 d 4 0 z 8 1 t 9 1 a 2 2 p 3 60 c 3 我正在尝试创建每组值的列表var2对应于给
  • Swift 4:计时器崩溃 - 无法识别的选择器发送到实例

    我试图调用 Timer 的一个实例 并在每一秒过去时打印 一秒已过去 我正在关注 Udemy 上的完整 iOs 11 和 Swift 开发人员课程 教练确实这样做了 他的代码可以工作 但我的代码却崩溃了 这是代码 var timer Tim
  • 将csv数据转换为数组格式

    我正在尝试使用jquery 形成一个wordCloud 我有一个 csv 文件需要读取并使用该数据形成一个 wordCloud 我的 csv 文件中有列 text weight Lorem 15 Ipsum 9 等等 但输入数据需要采用以下
  • Protobuf-net .proto 文件生成用于继承

    我正在对 Protobuf net 进行原型设计 以替换我们现有的一些 C 代码 该代码当前正在使用 Datacontract 将对象序列化为 Xml 使用protobuffer我们可以轻松地与Java共享数据 因此 我对 Protobuf
  • scipy.spatial.ckdtree 运行缓慢

    我一直在使用spatial cKDTree in scipy计算点之间的距离 对于我的典型数据集 查找约 1000 个点到约 1e6 点数组的距离 它总是运行得非常快 约 1 秒 我在 Ubuntu 14 10 的计算机上以 python
  • iPhone 本地化 - 某些本地化的 XIB 无法加载

    我制作了一个具有本地化版本的 iPhone 应用程序 它大部分工作正常 但有两个视图无法加载本地化 NIB 使用标准 NIB 英文 我确信我正确地进行了本地化 获取信息 使文件可本地化 添加本地化 添加 pl 波兰语 然后编辑创建的 NIB
  • 替换嵌套数组 ruby​​ 中的元素

    我无法在代码中找到问题所在 如果特定元素出现在宾果板上 我想用 X 替换它们 class BingoBoard def initialize board bingo board board end def number letter let
  • 如何在C++中默认初始化内置类型的局部变量?

    如何在 C 中默认初始化原始类型的局部变量 例如 如果 a 有一个 typedef typedef unsigned char boolean that s Microsoft RPC runtime typedef 我想更改以下行 boo
  • 从 N 个数中找出最大和第二大的数

    给定 n 个数字 如何使用最多 n log n 次比较找到最大和第二大数字 请注意 这不是 O n log n 而是真正的 n log n 次比较 帕杰顿发表了评论 让我详细说明一下 正如帕杰顿所说 这可以通过锦标赛选择来完成 可以将其视为
  • 移动返回时调用的构造函数而不是复制

    今天我发现这段代码并没有像我期望的那样工作 根据我的知识 对于 L 值 应该调用复制构造函数 而对于 R 值 应该选择移动构造函数 否则目的何在std move它实际上什么也不做 只是转换为 R 值 我正期待着return obj将调用复制
  • GROUP BY DESC 如何选择顺序?

    所以我正在为一家商店创建部分 如果没有 商店可以有多个范围section identifier为给定设置store id它应该回退到全局商店0 我想要的 SQL 命令应该返回一个列表section options对于任何相关的给定商店 我的