【问题标题】:MySql orderBy and COUNT()MySql order By 和 COUNT()
【发布时间】:2014-10-21 09:35:05
【问题描述】:

我正在尝试计算某件商品的购买次数。但是,我的查询中也计算了一个类别表,这当然会导致错误的数据。如何计算一张表中我需要的行数并只得到这些结果?

MySQL 查询

    select 
    `inventory`.`on_sale`,
    `inventory`.`id`,
    `inventory`.`sku`,
    `inventory`.`name`,
    `inventory`.`price`,
    `inventory_categories`.`category`,
    `inventory`.`stock_quantity`,
    COUNT(orders_product.sku) as skuCount
from
    `inventory`
        left join
    `orders_product` ON `orders_product`.`sku` = `inventory`.`sku`
        left join
    `inventory_categories` ON `inventory`.`sku` = `inventory_categories`.`sku`
group by `inventory_categories`.`category`
order by `skuCount` desc
limit 10000

很难显示我所有的记录,但基本上是这样的:

orders_product.sku = ORDER1234 & ORDER1234 & ORDER891010

inventory_categories.(id)category = (cat1)ORDER1234 & (cat1a)ORDER1234 & (cat1b)ORDER1234 & (cat2)ORDER891010

因此,在我的表格中,它分别显示 skuCount = 5 & 2 而不是分别需要的 2 & 1 结果。如果我没有带有该inventory.id 的订单,那么它会显示0,这是正确的,但是一旦有订单通过,它将计算该订单加上等于该sku 的所有类别。

如果我从我的 join 语句中删除 inventory_categories ,它不会出现任何问题。但是,出于记录目的,查询中需要它。

【问题讨论】:

  • 只加入一个没有得到错误结果的计数
  • 添加一个sqlfiddle.com 很难理解表格和东西。

标签: php mysql sql


【解决方案1】:

下面的查询怎么样:

SELECT i.on_sale, i.id, i.sku, i.name, i.price, ic.category, i.stock_quantity, 
(
  SELECT COUNT(*)
  FROM orders_product op
  WHERE op.sku = i.sku
) AS skuCount
FROM inventory i
LEFT JOIN inventory_categories ic ON i.sku = ic.sku
ORDER BY skuCount DESC
LIMIT 10000

【讨论】:

  • 看起来是这样做的。谢谢!
【解决方案2】:
SELECT A.on_sale, a.id, a.sku,a.name,a.price, a.stock_Quantity, skucount, count(ic.category) as CatCount
FROM 
( SELECT 
    `inventory`.`on_sale`,
    `inventory`.`id`,
    `inventory`.`sku`,
    `inventory`.`name`,
    `inventory`.`price`,
    `inventory`.`stock_quantity`,
    COUNT(orders_product.sku) as skuCount
  FROM `inventory`
  LEFT JOIN `orders_product` 
    ON `orders_product`.`sku` = `inventory`.`sku`
  GROUP BY `inventory`.`on_sale`, `inventory`.`id`,
    `inventory`.`sku`, `inventory`.`name`,
    `inventory`.`price`, `inventory`.`stock_quantity`) A
LEFT JOIN  `inventory_categories` IC
  ON `inventory`.`sku` = `inventory_categories`.`sku`
GROUP BY A.on_sale, a.id, a.sku,a.name,a.price, a.stock_Quantity, skucount
OREDER BY `skuCount` desc
LIMIT 10000

您必须首先获取包含 SKU 计数的结果集,然后加入表格。

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多