【问题标题】:MySQL Ordering by SubQueryMySQL 按子查询排序
【发布时间】:2015-10-28 14:59:44
【问题描述】:

我正在尝试提取下订单最多的客户列表。我似乎无法弄清楚如何保持子查询对列表进行排序。这是我的查询:

SELECT
  c.*,
  state.abbreviation AS state,
  country.abbreviation AS country
FROM main_customers AS c
  LEFT JOIN dict_stateProvince AS state ON c.state = state.id
  LEFT JOIN dict_country AS country ON c.country = country.id
WHERE c.id IN (SELECT customerId
               FROM main_orders
               GROUP BY customerId
               ORDER BY COUNT(*) DESC)
LIMIT 50;

如何保持主查询与子查询的顺序一致?

【问题讨论】:

    标签: mysql group-by subquery sql-order-by


    【解决方案1】:

    您的子查询没有真正的顺序,因为IN 忽略了顺序。但意图很明确。所以,使用join

    SELECT c.*,
           state.abbreviation AS state,
           country.abbreviation AS country
    FROM main_customers AS c JOIN
         (SELECT customerId, COUNT(*) as cnt
          FROM main_orders
          GROUP BY customerId
         ) mo
         ON mo.customerId = c.id LEFT JOIN
         dict_stateProvince AS state
         ON c.state = state.id LEFT JOIN
         dict_country AS country
         ON c.country = country.id
    ORDER BY mo.cnt DESC;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-20
      • 2014-12-09
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 2010-11-19
      • 1970-01-01
      相关资源
      最近更新 更多