Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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 我可以在分组之前执行COUNT()吗_Mysql_Sql_Count_Mysql Workbench - Fatal编程技术网

Mysql 我可以在分组之前执行COUNT()吗

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

我正在为学校做一个mySQL作业,我被一个问题困住了。我还是mySQL的新手。计数(o.customer_id)没有按我想要的方式工作。我想让它计算订单数量,但它正在计算所有项目。i、 e.客户1有2个订单,但它返回3个,因为一个订单有两个项目。我有三张桌子,一张是顾客桌,另一张是订单桌,每张订单上的每一项都有。我在下面提出了我的问题。任何帮助都会很好

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。。。(参见第二个选择示例)