【问题标题】:Find details for minimum price entry for each group of rows with the same article number查找具有相同货号的每组行的最低价格条目的详细信息
【发布时间】:2012-05-28 21:02:37
【问题描述】:

我阅读了很多关于此的内容,但没有一个对我有用。有人可以帮忙吗?

我有一张大桌子,上面有很多不同的文章(很多都使用相同的 EAN),并且总是只需要最便宜的文章(按价格排序)和正确的 AN:

*art   price   an    ean
*Test |79,00|15770|0808736558136
*Test |85,00|k3238|0808736558136
*Test |68,00|r4850|0808736558136
*Test |65,00|a1117|0808736558136
*Test |78,00|t8619|0808736558136

期待这个:

*Test |65,00|a1117|0808736558136

【问题讨论】:

  • 您愿意编辑问题标题吗?这实际上与分组前的排序无关,尽管我确实理解您为什么期望这种解决方案。
  • 对不起,我对我的问题的 findig 英文解释不太好 :-)
  • 回想起来总是更容易。谢谢。

标签: mysql sorting grouping greatest-n-per-group


【解决方案1】:
SELECT B.*
  FROM BigTable AS B -- Why do SQL questions omit the table names so often?
  JOIN (SELECT EAN, MIN(Price) AS Price
          FROM BigTable
         GROUP BY EAN
       ) AS P
    ON B.EAN = P.EAN AND B.Price = P.Price
 ORDER BY B.EAN;

子查询找到每个 EAN 的最低价格;外部查询查找与 EAN 匹配的详细信息以及该 EAN 的最低价格。如果给定 EAN 有两条最低价格相同的记录,则两者都会被选中。

【讨论】:

  • Mysql 错误:order 子句中的列 'ean' 不明确
  • OK - 消除歧义。这并不难做到。 :D 我会修复的。
  • 大家好!由于升级到 mysql 5.1.69,上述分组不再起作用。在 BigTable 中,我有很多没有分组的重复 EAN,但为什么? *艺术品价格低廉 *Test |79,00|15770|0808736558136 *Test |79,00|a1234|0808736558136 *Test |79,00|b1234|0808736558136 *Test |79,00|c1234|0808736558136 代码>
【解决方案2】:
SELECT * FROM myTable ORDER BY price ASC LIMIT 1

【讨论】:

  • 适用于价格最低的单一EAN;但不能很好地概括。你可以添加一个 WHERE 子句来指定你所追求的单个 EAN,但如果你追求很多?
  • @JonathanLeffler :但我们不按 EAN 排序 .... 所以如果 ean(s) 相同,问题出在哪里?可能我仍然误读了这个问题
  • 这适用于只有一个 EAN 的示例数据。在 BigTable 中,会有许多 EAN,但您的查询仍将只返回一行,而不是每个不同的 EAN 一行。
  • @JonathanLeffler :好的,现在我明白了。“预期的输出”让我不以为然,因为不提供超过一行...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 2014-01-26
相关资源
最近更新 更多