Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL获取产品类别的总卖家数_Mysql_Sql - Fatal编程技术网

Mysql SQL获取产品类别的总卖家数

Mysql SQL获取产品类别的总卖家数,mysql,sql,Mysql,Sql,我喜欢这样的数据库表: 表类别 餐桌用品 表1产品种类 我需要查询每个类别的最低、最高和平均价格: SELECT `categories`.`title`, min(product_varieties.wholesale_price) AS wholesalePriceMin, max(product_varieties.wholesale_price) AS wholesalePriceMax, avg(product_varieties.

我喜欢这样的数据库表:

表类别

餐桌用品

表1产品种类

我需要查询每个类别的最低、最高和平均价格:

SELECT `categories`.`title`,
         min(product_varieties.wholesale_price) AS wholesalePriceMin,
         max(product_varieties.wholesale_price) AS wholesalePriceMax,
         avg(product_varieties.wholesale_price) AS wholesalePriceAvg,
         min(product_varieties.retail_price) AS retailPriceMin,
         max(product_varieties.retail_price) AS retailPriceMax,
         avg(product_varieties.retail_price) AS retailPriceAvg
FROM `products`
LEFT JOIN `categories`
    ON `categories`.`id` = `products`.`category_id`
LEFT JOIN `product_varieties`
    ON `product_varieties`.`product_id` = `products`.`id`
WHERE `products`.`id` IN (1,2,3,4)
GROUP BY  `products`.`category_id`
现在我需要通过编辑我的当前查询来获取每个类别的总用户数和卖家数

我试着这样做:

SELECT `categories`.`title`,
         min(product_varieties.wholesale_price) AS wholesalePriceMin,
         max(product_varieties.wholesale_price) AS wholesalePriceMax,
         avg(product_varieties.wholesale_price) AS wholesalePriceAvg,
         min(product_varieties.retail_price) AS retailPriceMin,
         max(product_varieties.retail_price) AS retailPriceMax,
         avg(product_varieties.retail_price) AS retailPriceAvg,
         
    (SELECT user_id,
         COUNT(*)
    FROM products
    GROUP BY  category_id) AS totalUsers
FROM `products`
LEFT JOIN `categories`
    ON `categories`.`id` = `products`.`category_id`
LEFT JOIN `product_varieties`
    ON `product_varieties`.`product_id` = `products`.`id`
WHERE `products`.`id` IN (1,2,3,4)
GROUP BY  `products`.`category_id`
但我的查询不起作用,返回错误消息:

SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)

如何更正查询?

您的子查询必须是相关的,而不是完整的

选择“类别”。“标题”, Min产品品种。批发价格为批发价格Min, maxproduct\u品种。批发价格作为批发商价格Max, AVG产品品种。批发价格作为批发商价格AVG, minproduct_Varies.零售价格作为零售价格Min, maxproduct_Varies.retail_price作为retailPriceMax, AVG产品品种。零售价格作为零售价格AVG, 选择COUNTp.user\u id 来自产品p 其中p.user\u id=`products`.user\u id作为totalUsers 来自`产品` 左联接`类别` 关于'categories`.'id`='products`.'categories\u id` 左JOIN`product_变种` 关于'product'u varieds`.'product'u id`='products`.'id`` 其中'products'。'id'在1,2,3,4中 按“产品”分组。“类别”id`
另外,可能需要COUNTDISTINCT p.user\u id…

您的子查询必须是相关的,而不是完整的

选择“类别”。“标题”, Min产品品种。批发价格为批发价格Min, maxproduct\u品种。批发价格作为批发商价格Max, AVG产品品种。批发价格作为批发商价格AVG, minproduct_Varies.零售价格作为零售价格Min, maxproduct_Varies.retail_price作为retailPriceMax, AVG产品品种。零售价格作为零售价格AVG, 选择COUNTp.user\u id 来自产品p 其中p.user\u id=`products`.user\u id作为totalUsers 来自`产品` 左联接`类别` 关于'categories`.'id`='products`.'categories\u id` 左JOIN`product_变种` 关于'product'u varieds`.'product'u id`='products`.'id`` 其中'products'。'id'在1,2,3,4中 按“产品”分组。“类别”id`
另外,可能需要COUNTDISTINCT p.user\u id…

在主查询的选择列表中可以使用相关子查询,此查询必须仅返回一个值,并且通过where子句进行关联,因为主查询中的一些数据用于定位子查询中所需的数据

SELECT
      `categories`.`title`
    , min(product_varieties.wholesale_price) AS wholesalePriceMin
    , max(product_varieties.wholesale_price) AS wholesalePriceMax
    , avg(product_varieties.wholesale_price) AS wholesalePriceAvg
    , min(product_varieties.retail_price) AS retailPriceMin
    , max(product_varieties.retail_price) AS retailPriceMax
    , avg(product_varieties.retail_price) AS retailPriceAvg
    , (
        SELECT COUNT(*)
        FROM products AS p
        WHERE p.category_id = `products`.`category_id`
        ) AS totalUsers
FROM `products`
LEFT JOIN `categories` ON `categories`.`id` = `products`.`category_id`
LEFT JOIN `product_varieties` ON `product_varieties`.`product_id` = `products`.`id`
WHERE `products`.`id` IN (1, 2, 3, 4)
GROUP BY `products`.`category_id`
但我怀疑这可以进一步简化:

SELECT
      `categories`.`title`
    , min(product_varieties.wholesale_price) AS wholesalePriceMin
    , max(product_varieties.wholesale_price) AS wholesalePriceMax
    , avg(product_varieties.wholesale_price) AS wholesalePriceAvg
    , min(product_varieties.retail_price) AS retailPriceMin
    , max(product_varieties.retail_price) AS retailPriceMax
    , avg(product_varieties.retail_price) AS retailPriceAvg
    , COUNT(products.user_id) AS totalUsers
FROM `products`
LEFT JOIN `categories` ON `categories`.`id` = `products`.`category_id`
LEFT JOIN `product_varieties` ON `product_varieties`.`product_id` = `products`.`id`
WHERE `products`.`id` IN (1, 2, 3, 4)
GROUP BY `products`.`category_id`
或者,根据数据:

    , COUNT(DISTINCT products.user_id) AS totalUsers

相关子查询可以在主查询的select列表中使用,此查询必须仅返回一个值,并且相关通过where子句发生,因为主查询中的一些数据用于定位子查询中所需的数据

SELECT
      `categories`.`title`
    , min(product_varieties.wholesale_price) AS wholesalePriceMin
    , max(product_varieties.wholesale_price) AS wholesalePriceMax
    , avg(product_varieties.wholesale_price) AS wholesalePriceAvg
    , min(product_varieties.retail_price) AS retailPriceMin
    , max(product_varieties.retail_price) AS retailPriceMax
    , avg(product_varieties.retail_price) AS retailPriceAvg
    , (
        SELECT COUNT(*)
        FROM products AS p
        WHERE p.category_id = `products`.`category_id`
        ) AS totalUsers
FROM `products`
LEFT JOIN `categories` ON `categories`.`id` = `products`.`category_id`
LEFT JOIN `product_varieties` ON `product_varieties`.`product_id` = `products`.`id`
WHERE `products`.`id` IN (1, 2, 3, 4)
GROUP BY `products`.`category_id`
但我怀疑这可以进一步简化:

SELECT
      `categories`.`title`
    , min(product_varieties.wholesale_price) AS wholesalePriceMin
    , max(product_varieties.wholesale_price) AS wholesalePriceMax
    , avg(product_varieties.wholesale_price) AS wholesalePriceAvg
    , min(product_varieties.retail_price) AS retailPriceMin
    , max(product_varieties.retail_price) AS retailPriceMax
    , avg(product_varieties.retail_price) AS retailPriceAvg
    , COUNT(products.user_id) AS totalUsers
FROM `products`
LEFT JOIN `categories` ON `categories`.`id` = `products`.`category_id`
LEFT JOIN `product_varieties` ON `product_varieties`.`product_id` = `products`.`id`
WHERE `products`.`id` IN (1, 2, 3, 4)
GROUP BY `products`.`category_id`
或者,根据数据:

    , COUNT(DISTINCT products.user_id) AS totalUsers

相反,左边加入ToalSudio子查询,或者有一个相关的子查询返回一列,一行。您的子查询必须是相关的,不是完整的。考虑在应用程序代码中处理数据显示的问题,您的方案似乎是错误的。具有不同用户id的类别和产品可通过连接表进行参考。请用实际创建表替换近似表说明。将INSERT添加到具有5-10行足够样本数据的中。用解释值来显示这个数据的期望输出。相反,左边加入ToeUpple子查询,或者有一个相关的子查询返回一列,一行。您的子查询必须是相关的,不是完整的。考虑应用程序代码中的数据显示问题,您的方案似乎是错误的。具有不同用户id的类别和产品可通过连接表进行参考。请用实际创建表替换近似表说明。将INSERT添加到具有5-10行足够样本数据的中。显示此数据的所需输出,并解释参考值。