【问题标题】:MYSQL Brands list order by product count butMYSQL Brands 按产品数量列出订单,但
【发布时间】:2014-09-18 18:20:07
【问题描述】:

我有两张桌子。像这样;


Products table

id | brand | bla bla bla

Priority table

id | brand

我正在列出从 Products 表中选择 DISTINCT 品牌 BY ORDERING product COUNT like this;

SELECT DISTINCT brand as bra, (SELECT COUNT(id) FROM Products WHERE brand = bra) as cnt FROM Products ORDER BY cnt DESC

结果是:

  1. 一个品牌(65 种产品)
  2. B 品牌(43 种产品)
  3. C 品牌(23 种产品)
  4. D 品牌(17 种产品)

这是一条完美的工作线。但我想优先考虑一些品牌。用于列表顶部。

像这样:

  1. S 品牌(22 种产品)
  2. X 品牌(4 个产品)
  3. 一个品牌(65 种产品)
  4. B 品牌(43 种产品)
  5. C 品牌(23 种产品)
  6. D 品牌(17 种产品)

我使用了这条线。但它没有用。

SELECT DISTINCT brand as bra, (SELECT COUNT(id) FROM Products WHERE brand = bra) as cnt, , (SELECT brand FROM Priority) as prior FROM Products ORDER BY prior ASC,cnt DESC

什么是真线?谢谢...

---编辑--- 完整答案是:

SELECT p.brand as bra, count(p.id) as cnt
FROM products p
GROUP BY bra
ORDER BY bra IN (SELECT pri.brand FROM priority pri ORDER BY pri.brand ASC) DESC, mark ASC

【问题讨论】:

  • 如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。

标签: mysql sql select count distinct


【解决方案1】:

使用这个:

ORDER BY bra IN (SELECT brand FROM Priority) DESC, cnt DESC

【讨论】:

    【解决方案2】:

    您的第一个查询更清楚地写成:

    SELECT b.brand as bra, count(p.id) as cnt
    FROM bra b left outer join
         Products p
         on b.brand = p.brand
    GROUP BY b.bra
    ORDER BY cnt DESC;
    

    只有在您担心不匹配的记录时才需要left outer join。如果这不是问题,编写查询的更简单方法是:

    SELECT p.brand as bra, count(p.id) as cnt
    FROM Products p
    GROUP BY p.bra
    ORDER BY cnt DESC;
    

    如果您想按优先级排序,只需加入即可。这可能就是您想要的:

    SELECT p.brand as bra, count(p.id) as cnt
    FROM bra b left outer join
         Products p
         on b.brand = p.brand left outer join
         Priority pr
         on b.brand = pr.brand
    GROUP BY b.bra
    ORDER BY pr.brand is not null desc, cnt DESC;
    

    这会将品牌放在优先级表中。

    【讨论】:

    • 感谢您的回答。但是 p.bra 在 GROUP BY 中给出错误。 "'group statement' 中的未知列 'p.bra'"
    猜你喜欢
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多