Mysql 我可以在分组之前执行COUNT()吗
我正在为学校做一个mySQL作业,我被一个问题困住了。我还是mySQL的新手。计数(o.customer_id)没有按我想要的方式工作。我想让它计算订单数量,但它正在计算所有项目。i、 e.客户1有2个订单,但它返回3个,因为一个订单有两个项目。我有三张桌子,一张是顾客桌,另一张是订单桌,每张订单上的每一项都有。我在下面提出了我的问题。任何帮助都会很好Mysql 我可以在分组之前执行COUNT()吗,mysql,sql,count,mysql-workbench,Mysql,Sql,Count,Mysql Workbench,我正在为学校做一个mySQL作业,我被一个问题困住了。我还是mySQL的新手。计数(o.customer_id)没有按我想要的方式工作。我想让它计算订单数量,但它正在计算所有项目。i、 e.客户1有2个订单,但它返回3个,因为一个订单有两个项目。我有三张桌子,一张是顾客桌,另一张是订单桌,每张订单上的每一项都有。我在下面提出了我的问题。任何帮助都会很好 SELECT email_address, COUNT(o.order_id) AS num_of_orders, SUM(((i
SELECT email_address, COUNT(o.order_id) AS num_of_orders,
SUM(((item_price - discount_amount) * quantity)) AS total
FROM customers c JOIN orders o
ON c.customer_id = o.customer_id
JOIN order_items ot
ON o.order_id = ot.order_id
GROUP BY o.customer_id
HAVING num_of_orders > 1
ORDER BY total DESC;
看起来您要计算不同的订单数。在计数中添加一个不同的值。尽管MySQL允许您在HAVING子句中使用SELECT表达式,但这样做并不是一种好的做法
SELECT email_address, COUNT(DISTINCT o.order_id) AS num_of_orders,
SUM(((item_price - discount_amount) * quantity)) AS total
FROM customers c JOIN orders o
ON c.customer_id = o.customer_id
JOIN order_items ot
ON o.order_id = ot.order_id
GROUP BY o.customer_id
HAVING COUNT(DISTINCT o.order_id) > 1
ORDER BY total DESC;
只需使用
不同的保留字即可:
SELECT email_address, COUNT(distinct o.order_id) AS num_of_orders
只需取出项目的连接。它所做的只是在有多个项目时复制行
SELECT email_address, COUNT(o.order_id) AS num_of_orders,
SUM(((item_price - discount_amount) * quantity)) AS total
FROM customers c JOIN orders o
ON c.customer_id = o.customer_id
GROUP BY o.customer_id
HAVING COUNT(o.order_id) > 1
ORDER BY total DESC;
改变一行对我来说也会产生同样的结果!不适用于mysql。。。(参见第二个选择示例)