mysql - SQL获取产品类别的总卖家
问题描述
我喜欢这个数据库表:
桌子 categories
id
title
description
status
桌子 products
id
user_id
category_id
description
status
桌子 product_varieties
id
variety_id
product_id
description
wholesale_price
retail_price
status
total
我有查询来获取价格 min
,max
并且avg
在每个类别中:
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)
如何更正我的查询?
解决方案
您的子查询必须是相关的,而不是完整的。
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(p.user_id)
FROM products p
WHERE p.user_id = `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`
PS。也许,COUNT(DISTINCT p.user_id)
需要...
推荐阅读
- python-3.x - 在python中使用多线程请求图像时出现操作系统错误
- python - 牛顿法收敛但我得到无界错误
- css - 绝对定位元素内的图像
- c# - 检查俱乐部系统中用户的多个角色
- git - 即使在 Azure DevOps 中连接到项目后,也无法看到更改分支拉取请求同步
- c++ - 一次读取一个文件时出现一个错误
- json - 安全的 JSON 解码。仍然找不到密钥:没有与密钥关联的值'
- amazon-web-services - AWS Elastic Beanstalk 100.0% 的请求以 HTTP 5xx 失败
- java - 在二维数组的末尾添加新列
- swift - Swift 月周数