sql 只获取表中的第一个记录行,我想要所有

2023-12-11

有人已经帮助我解决了这个查询,但我进行了调整,但遇到了问题:

    SELECT 
        AVG(tyd.price) AS avg_price, COUNT(tyd.id_product) AS cnt, 
        tyd.id_marchand, tyd.id_product, 
        catalog.price AS c_price, tyd.price AS t_price, 
        tyd.amount AS t_am, pro_tyd.amount AS p_am, 
        pro_tyd.price AS p_price, catalog.img_src,  
        tyd.step, tyd.login AS tyd_l
    FROM catalog 
    INNER JOIN tyd ON catalog.id_marchand = tyd.id_marchand 
                   AND catalog.id_product =   tyd.id_product
                   AND tyd.step = "1" 
    INNER JOIN pro_tyd  ON tyd.id_marchand = pro_tyd.id_marchand 
                        AND tyd.id_product = pro_tyd.id_product
    GROUP BY 
         catalog.id_product, catalog.id_marchand
    HAVING 
         tyd.login = "[email protected]"

它仅在以下情况下有效tyd.login = "[email protected]"这是较低的 ID。不适用于 user1 或 user2...我只是不明白为什么...!如果我按 tyd.login 分组,它也可以工作,但在这种情况下,AVG 和 COUNT 函数只能在一行上工作......

这是表格:

id  id_marchand  id_product   login       price  amount  delay  step    time   
29      1           1       [email protected]   344     1       0      1   1343297500
120     1           1       [email protected]   54      1       0      1   1343297504
109     1           1       [email protected]  34      1       0      1   1343298598

When HAVING tyd.login = "[email protected]"它工作得很好。当 user1 或 user2 时,我得到 0 行。

感谢您的帮助

第一主题:Sql,在转义 where 条件的同时获取一组平均值


问题是您的查询是不确定的。您正在选择更多作为分组依据的列,其中附加列不是由作为分组依据的列决定的。如果后者为真,那么这将属于 SQL 的 ANSII 标准,因为(在我看来)MySQL 允许该语句运行根本不是 MySQL 的故障。其他 DBMS 则采取相反的方式,因为它们无法确定某些列是否是未包含在 group by 中的其他列的函数,因此它们现在将允许任何包含选择列表中未包含在 group by 中的列的语句。

为了尝试简化问题,请使用以下数据集(表 T)

ID    Col1    Col2
1     1       1
2     1       3

运行这个:

SELECT Col1, MAX(Col2) AS MaxCol2, MIN(Col2) AS MinCol2, AVG(Col2) AS AvgCol2
FROM T
GROUP BY Col1

总会回来的

Col1    MaxCol2    MinCol2    AvgCol2
1       3          1          2

但是,如果你抛出ID融入其中

SELECT ID, Col1, MAX(Col2) AS MaxCol2, MIN(Col2) AS MinCol2, AVG(Col2) AS AvgCol2
FROM T
GROUP BY Col1

无法确定将返回哪个 ID,1 或 2,最可能的结果是

ID    Col1    MaxCol2    MinCol2    AvgCol2
1    1       3          1          2

然而,SQL 中没有定义任何内容来表明结果不可能是:

ID    Col1    MaxCol2    MinCol2    AvgCol2
2     1       3          1          2

因此,如果上面是结果集,并且您添加了HAVING ID = 1对于查询,由于 HAVING 子句应用于数据的点,您将不会得到任何结果。如果您要将 ID 添加到GROUP BY你最终会得到 2 行,据我了解,这不是你想要的,如果你要将它添加到WHERE您的 MIN、MAX 和 AVG 功能将受到影响。所以需要使用子查询。所以在这个例子中我会使用

SELECT  T.ID, T.Col1, MaxCol2, MinCol2, AvgCol2
FROM    T
        INNER JOIN
        (   SELECT Col1, MAX(Col2) AS MaxCol2, MIN(Col2) AS MinCol2, AVG(Col2) AS AvgCol2
            FROM T
            GROUP BY Col1
        ) T2
            ON T.Col1 = T2.Col1
WHERE   ID = 1 -- OR ID = 2 DEPENDING ON REQUIREMENTS

为了将其应用到您的情况,数据库引擎已确定将为不在分组依据中的列返回的行是包含 ID = 29 的行。因此,您的 HAVING 子句仅应用于该行,即[电子邮件受保护], and [电子邮件受保护]在应用 HAVING 子句时,in 已从结果中删除。您需要单独执行聚合函数和过滤。

现在我还没有完全理解您的模式,但我希望我已经足够好地解释了非确定性语句的问题,以便您可以对我尝试重写查询进行所需的任何修改

SELECT  Avg_Price,
        Cnt,
        tyd.id_marchand, 
        tyd.id_product, 
        catalog.price AS c_price, 
        tyd.price AS t_price, 
        tyd.amount AS t_am, 
        pro_tyd.amount AS p_am, 
        pro_tyd.price AS p_price, 
        catalog.img_src,  
        tyd.step, 
        tyd.login AS tyd_l
FROM    Catalog
        INNER JOIN tyd
            ON catalog.id_marchand = tyd.id_marchand 
            AND catalog.id_product = tyd.id_product
        INNER JOIN Pro_tyd
            ON tyd.id_marchand = pro_tyd.id_marchand 
            AND tyd.id_product = pro_tyd.id_product
        INNER JOIN
        (   SELECT  ID_Marchand, ID_Product, Step, AVG(tyd.price) AS avg_price, COUNT(tyd.id_product) AS cnt
            FROM    Tyd
            WHERE   Step = '1'
            GROUP BY ID_Marchand, ID_Product, Step
        ) Agg
            ON Agg.id_marchand = pro_tyd.id_marchand 
            AND Agg.id_product = pro_tyd.id_product
            AND Agg.Step = tyd.Step
WHERE   tyd.Login = '[email protected]'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sql 只获取表中的第一个记录行,我想要所有 的相关文章

  • PIVOT 运算符中指定的列名“FirstName”与 PIVOT 参数中的现有列名冲突

    当我尝试替换时收到以下错误消息null to zero PIVOT 运算符中指定的列名 jan 与 PIVOT 参数中的现有列名称 查询如下 select from select isnull jan 0 isnull feb 0 sum
  • 为什么 Orchard 在执行内容项查询时如此慢?

    假设我想查询所有 Orchard 用户 ID 并且还想包括那些已被删除 也称为软删除 的用户 该数据库包含大约 1000 个用户 Option A 大约需要 2 分钟 Orchard ContentManagement IContentMa
  • 将两个sql查询合并为一个查询

    如何组合以下 2 个查询以便获得两列 PAYMODE 和付款类型 两个查询都很相似 并且针对同一个表 将两个 sql 查询合并为一个查询 这样我就不需要执行两个单独的查询 SELECT ETBL DESC TXT as PAYMODE FR
  • PDO 库比本机 MySQL 函数更快吗?

    我已经阅读了几个与此相关的问题 但我担心它们可能已经过时 因为自这些问题得到解答以来 更新版本的 PDO 库已经发布 我编写了一个 MySQL 类 它构建查询并转义参数 然后根据查询返回结果 目前这个类正在使用内置的mysql函数 我很清楚
  • 在 PowerShell 中,将两个表合并为一个表的最佳方法是什么?

    我对 PowerShell 相当陌生 想知道是否有人知道解决以下示例问题的更好方法 我有一组从 IP 地址到主机名的映射 这表示活动 DHCP 租约的列表 PS H gt leases IP Name 192 168 1 1 Apple 1
  • 使用子查询与 LEFT JOIN 一起选择 MAX 值

    我有一个获取搜索结果的查询 效果很好 查询成功示例 SELECT individuals individual id individuals unique id TIMESTAMPDIFF YEAR individuals day of b
  • sqlite 插入表中 select * from

    我需要在 Android 应用程序中将数据从一个表移动到另一个表 我想使用以下sql insert into MYTABLE2 select id STATUS risposta DATETIME now data ins from MYT
  • 如何将 LEFT JOIN 限制为 SQL Server 中的第一个结果?

    我有一些 SQL 几乎可以做我想做的事情 我正在使用三个表 Users UserPhoneNumbers 和 UserPhoneNumberTypes 我正在尝试获取用户列表及其电话号码以供导出 数据库本身很旧并且存在一些完整性问题 我的问
  • 如果不存在则插入数据(来自 2 个表),否则更新

    再会 我有3张桌子 tbl仓库产品 ProductID ProductName ProductCode Quantity tbl分公司产品 ProductID ProductCode ProductCode Quantity Locatio
  • 增量SQL查询

    我的应用程序有一组固定的 SQL 查询 这些查询以轮询模式运行 每 10 秒一次 由于数据库的大小 gt 100 GB 和设计 超级规范化 我遇到了性能问题 每当数据库上发生更改查询结果的 CRUD 事件时 是否可以对给定查询进行增量更改
  • 如何在可能为空值的字段上创建唯一索引(Oracle 11g)?

    这是包含 3 列的示例表 ID UNIQUE VALUE UNIQUE GROUP ID 我希望可以允许以下记录 1 NULL NULL 2 NULL NULL or 3 NULL 7 4 123 7 or 注意 此条件不允许unique
  • 如何在 Doctrine 中使用 andWhere 和 orWhere ?

    WHERE a 1 AND b 1 Or b 2 AND c 1 OR c 2 我怎样才能在教义中做到这一点 q gt where a 1 q gt andWhere b 1 q gt orWhere b 2 q gt andWhere c
  • SQL where 连接集必须包含所有值,但可以包含更多值

    我有三张桌子offers sports和连接表offers sports class Offer lt ActiveRecord Base has and belongs to many sports end class Sport lt
  • boost::algorithm::join 的一个很好的例子

    我最近想用提升 算法 加入 http www boost org doc libs 1 41 0 doc html string algo reference html header boost algorithm string join
  • 获取下一个ID而不插入行

    在 SQL SQL Server 中是否可以在插入行之前从表中的标识列检索下一个 ID 整数 而无需实际插入行 如果删除了最近的行 则这不一定是最高 ID 加 1 我问这个问题是因为我们偶尔需要用新行更新实时数据库 行的 ID 在我们的代码
  • 子查询与连接

    我重构了从另一家公司继承的应用程序的一个缓慢部分 以使用内部联接而不是子查询 例如 WHERE id IN SELECT id FROM 重构后的查询运行速度提高了约 100 倍 50 秒到 0 3 我预计会有改进 但谁能解释为什么它如此剧
  • SQL:将一个表中的所有记录插入到另一表中,而不指定列

    我想将备份表 foo bk 中的所有记录插入到 foot 表中 而不指定特定的列 如果我尝试这个查询 INSERT INTO foo SELECT FROM foo bk 我会收到错误 插入错误 列名称或提供的值的数量与表定义不匹配 是否可
  • 获取 pandas 中最后一次出现特定值之后的所有行

    我的数据框看起来像 ID colA 1 B 1 D 2 B 2 D 2 C 我已返回每组中事件 B 最后一次出现后的所有行 输出将是 ID colA 1 D 2 D 2 C 我试过 a df colA str contains B grou
  • 如何在 SQL 中存储目标(例如 RPG Quest)

    今天有人问我他们应该如何将任务目标存储在 SQL 数据库中 在这种情况下 请考虑角色扮演游戏 目标可能包括以下一些内容 发现 地点 杀死 n MOB 类型 获取 对象 的 n 个 实现 技能组 中的 技能 你在角色扮演游戏中获得的所有其他东
  • 如何使组合键唯一?

    I am making a database of students in one school Here is what I have so far 如果您不喜欢阅读 请跳至 简而言之 部分 问题是我对这个设计并不满意 我想要的组合gra

随机推荐

  • Intellij Scala 工作表运行类型差异解释

    在 Intellij Scala 工作表支持中 运行类型 即 PLAIN 与 REPL 之间有什么区别 Plain评估模型在评估表达式之前一次性编译整个工作表 同时REPL评估模型在移动到下一个之前评估每个表达式 添加一个表达式REPL模式
  • JS Ajax调用PHP并获取ajax调用数据

    我有一个标准的 javascript ajax 调用 我将 data 设置为 json 数据 ajax type POST url BaseUrl User Login url BaseUrl User Limit 1 2 data api
  • 数组上“大于”(以及另一个不等式比较运算符)的行为

    我找不到任何描述或任何提及如何 gt lt lt and gt 在 JavaScript 中比较两个数组时运算符的行为 我能想到的唯一一件微不足道的事情是 两个数组通过每个相对索引的两个元素进行比较 但在测试之后 我没有得到我预期的结果 那
  • 将“分组”和“堆叠”组合在条形图中?

    我知道如何画一个groupedBAR 图和stackedBAR图如下 Y round rand 5 4 10 figure subplot 2 2 1 bar Y grouped title Group similar for hist h
  • 收到 ERR_INVALID_HTTP_RESPONSE 错误 laravel5 本地主机

    当我启动我的程序时我陷入困境拉拉维尔 5本地主机上的项目谷歌浏览器 我正在使用此存储库中的引导管理面板 https github com start laravel sb admin laravel 5 我安装了所有的需求 比如npm bo
  • sendTextMessage(电话号码, null, 消息, null, null);即使消息未发送,也始终返回成功

    我尝试使用短信活动这个链接但问题是它总是给出 消息已发送 如何知道消息是否真的发送了 这是代码 try SmsManager smsManager SmsManager getDefault smsManager sendTextMessa
  • IIS Express 过度缓存经典 ASP 页面

    我遇到了这个随机出现的问题 当我对 ASP 页面进行更改时 IIS Express 无法识别 它提供页面的先前版本 我可以通过重新编辑页面 进行一些小的更改 然后撤消更改并重新保存文件来解决此问题 但这很烦人 到目前为止 我只在经典 ASP
  • 在oracle SQL中计算没有日历表的工作日(包括日期之间的假期)

    好的 所以我已经阅读了大量关于在 sql 中模拟 excel 的网络日函数的可能性的文章 并得出结论 到目前为止最简单的解决方案是有一个日历表 该表将标记工作日或非工作日工作日 然而 由于我无法控制的情况 我们无法享受到如此奢侈的享受 而且
  • 如何使用 JavaScript 检测地址栏更改?

    我有一个 Ajax 密集型应用程序 可能有一个 URL 例如 http example com myApp page 1 当用户操作该网站时 地址栏可能会更改为类似的内容 http example com myApp page 5 无需重新
  • 从 floatbuffer 转换为 byte[]

    我正在尝试找到一种在java中使用jack audio的方法 我已经成功创建基于 jnajack 的包装器 以将音频从 jacks 的端口获取到 java 应用程序 原始 jnajack 不适用于 jack 1 9 8 但我找不到操作数据的
  • IE10 中等高列内的元素内容不是 100%

    对于我正在开发的应用程序 我需要等高的列 我选择使用 CSS 将我的列项目设置为表格的样式 这样每根柱子的高度确实是柱子高度中最大的 请参阅此处的示例 http jsfiddle net roelvd GXe9m 现在每个浏览器中每列的高度
  • 浮点处理器非确定性?

    在不涉及不必要的细节的情况下 基于相同的输入 浮点数 x86 64 上的运算是否有可能返回其结果的微小变化 哪怕有一点点不同 我正在模拟一个基本混沌的系统 我希望数据的微小变化会产生明显的影响 然而我预计 使用相同的数据 程序的行为将被修复
  • 在Python子进程中,使用Popen()和check_output()有什么区别?

    以shell命令 cat file txt 为例 使用 Popen 可以运行 import subprocess task subprocess Popen cat file txt shell True stdout subprocess
  • 访问闭包捕获的变量

    我想知道是否有任何方法可以从函数外部访问函数中闭包捕获的变量 例如如果我有 A function b var c function some code using b foo function do things with c 有什么办法可
  • 如何在函数出口上运行清理代码?

    C 类提供 RAII 习惯用法 因此你不必关心异常 void function The memory will be freed automatically on function exit std vector
  • 如何在 iOS 7 中向全屏 VC 添加自定义导航栏并使其与状态栏相匹配?

    在我正在开发的应用程序 Xcode 5 gt iOS 7 自动布局 中 我推送了一个模式视图控制器 我希望模态视图控制器有一个导航栏 所以我添加了一个 并添加了一个约束 将其顶部与顶部布局指南对齐 因此它放置在状态栏的正下方 我使用自己的导
  • 读取共享库中的文件 Xamarin C#

    我在共享库中保存了一些 json 文件 我已经成功地通过代码在 iOS 中很好地阅读了 string fileName Files file name json var path Path Combine NSBundle MainBund
  • Firebase RecaptchaVerifier.clear() 无效

    我有一个 React Web 应用程序 我想在其中实现电话身份验证 我已经根据文档和示例初始化了 recaptchaVerifier 但是 如果我想再次提交表单 比如因为错误 我收到错误 Error reCAPTCHA has alread
  • Angular2 组件在循环中渲染 2 个 tr 元素

    我需要编写一个具有如下模板的组件 tr tr tr tr 这必须与 ngFor 一起使用来创建表 组件的选择器是spot row 该组件有一个名为的输入变量spot 所需的输出必须如下所示 table tbody tr tr tr tr t
  • sql 只获取表中的第一个记录行,我想要所有

    有人已经帮助我解决了这个查询 但我进行了调整 但遇到了问题 SELECT AVG tyd price AS avg price COUNT tyd id product AS cnt tyd id marchand tyd id produ