【问题标题】:Group by x where y = A and B and C按 x 分组,其中 y = A 和 B 和 C
【发布时间】:2011-04-06 11:43:54
【问题描述】:

我有一个存储产品价格信息的表格。它有一个产品 ID 列、一个数量和一个折扣。 (用户购买 2 件可获得 1 英镑的折扣,购买 3 件可获得 2 英镑的优惠等)。

我想提取所有具有特定数量折扣的产品。例如,仅分别购买 1,2 或 3 可享受 5 英镑、10 英镑和 20 英镑折扣的产品。

我该怎么做?

我想按产品 ID 分组,其中有三行符合我的条件 - 没有其他产品。

【问题讨论】:

    标签: mysql group-by


    【解决方案1】:

    未经测试(取决于您的架构),但想法如下:

    SELECT P.id, count(P.id)
    FROM products P
      LEFT JOIN discounts D ON P.id = D.product_id
    WHERE
      (D.quantity = 1 AND D.amount = 5)
      OR (D.quantity = 2 AND D.amount = 10)
      OR (D.quantity = 3 AND D.amount = 20)
    GROUP BY P.id
    HAVING count(P.id) = 3
    

    【讨论】:

      【解决方案2】:

      这是 SQL Server 的查询,可能对 MySql 有一些调整,但这是基础。

      SELECT * FROM <TABLE> WHERE ProductId in
      (SELECT ProductId
      FROM <TABLE>
      GROUP BY ProductId
      HAVING COUNT(ProductId) = 3)
      

      【讨论】:

      • 感谢您让我开始!您的查询有效,我只需要添加一些 where 子句。再次感谢!
      【解决方案3】:

      我最终得到了

      SELECT * FROM table WHERE ProductID IN
      (SELECT ProductId
      FROM table
      WHERE (qty = X AND price = X) OR (qty = X AND price = X) OR (qty = X AND price = X)
      GROUP BY ProductID
      HAVING COUNT(ProductID) = 3)
      
      GROUP BY productID
      ORDER BY productID, qty
      

      这给了我需要的过滤。谢谢你让我开始!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-25
        • 2012-01-28
        • 2022-04-11
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        相关资源
        最近更新 更多