Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 选择列必须对所有行具有相同值的行_Mysql - Fatal编程技术网

Mysql 选择列必须对所有行具有相同值的行

Mysql 选择列必须对所有行具有相同值的行,mysql,Mysql,我想写一个MySQL脚本,完成以下任务,我有一个Orders表,其中包含如下数据- CustomerNumber | OrderNumber | Fullfilled ----------------------------------------- 001 10001 T 001 10002 T 002 10003 F 002 10004

我想写一个MySQL脚本,完成以下任务,我有一个Orders表,其中包含如下数据-

CustomerNumber | OrderNumber | Fullfilled
-----------------------------------------
001              10001         T
001              10002         T

002              10003         F
002              10004         T

003              10005         T
003              10006         T
003              10007         T

004              10008         T
我想创建一个查询,该查询将只列出拥有1个以上订单的客户编号,并且他们的所有订单都具有Fullfilled=T


对上述数据的查询将导致CustomerNumber列表为-001003

这就是你要找的:

Select the customernumber from the orders table where fulfilled is set to T only.

Group it by the customernumber 

Having/Where the customernumber shows up more than once
那么SQL是:

SELECT customernumber FROM orders 
WHERE fulfilled ='T'
GROUP BY customernumber 
HAVING 
COUNT(distinct customernumber) > 1);

这就是你要找的:

Select the customernumber from the orders table where fulfilled is set to T only.

Group it by the customernumber 

Having/Where the customernumber shows up more than once
那么SQL是:

SELECT customernumber FROM orders 
WHERE fulfilled ='T'
GROUP BY customernumber 
HAVING 
COUNT(distinct customernumber) > 1);
试着这样做:

 select customerNumber from `table`
 group by customerNumber
 HAVING SUM(Fullfilled='T')>1
该代码的工作原理如下: 1-按客户编号分组客户编号 2-使用have和聚合函数SUM Fullfilled='T'>1,按重复多次的customerNumber进行筛选。

尝试如下操作:

 select customerNumber from `table`
 group by customerNumber
 HAVING SUM(Fullfilled='T')>1
SELECT CustomerNumber
FROM orders
GROUP BY Customernumber
HAVING Sum(Fullfilled = 'T') > 1
该代码的工作原理如下: 1-按客户编号分组客户编号 2-使用have和聚合函数SUM Fullfilled='T'>1按重复多次的customerNumber进行筛选

SELECT CustomerNumber
FROM orders
GROUP BY Customernumber
HAVING Sum(Fullfilled = 'T') > 1
上面具有SumFullfilled='T'>1的子句将确保只带来具有超过1个Fullfilled='T'的customerNUmber。 使用GROUPBY子句,以便我们可以使用HAVING子句

上面具有SumFullfilled='T'>1的子句将确保只带来具有超过1个Fullfilled='T'的customerNUmber。 使用GROUP BY子句,以便我们可以使用HAVING子句。

尝试以下操作:

SELECT CustomerNumber 
FROM mytable
GROUP BY CustomerNumber 
HAVING COUNT(DISTINCT OrderNumber) > 1 AND SUM(Fullfilled <> 'T') = 0
查询在其HAVING子句中使用两个谓词:

第一个返回与多个不同订单号相关的客户号 第二个过滤掉与至少一个Fullfilled='T'记录相关的客户编号

试试这个:

SELECT CustomerNumber 
FROM mytable
GROUP BY CustomerNumber 
HAVING COUNT(DISTINCT OrderNumber) > 1 AND SUM(Fullfilled <> 'T') = 0
查询在其HAVING子句中使用两个谓词:

第一个返回与多个不同订单号相关的客户号 第二个过滤掉与至少一个Fullfilled='T'记录相关的客户编号

创建表/插入数据

您可以通过分组、计数和求和组合来完成所需的操作。 我会发布一些选择的结果,这样你们就可以理解想要的是什么

质疑

结果

现在确保只显示一个订单中有多个订单的记录。 我们使用COUNTDISTINCT OrderNumber>1筛选记录

质疑

结果

现在确保只显示一个订单中有多个订单的记录。 我们要确保筛选出所有记录都应该具有Fullfilled=T的记录。 我们使用COUNTDISTINCT OrderNumber>1和SUMFullfilled='T'=COUNTDISTINCT OrderNumber=1筛选记录

质疑

结果

最终查询

结果

创建表/插入数据

您可以通过分组、计数和求和组合来完成所需的操作。 我会发布一些选择的结果,这样你们就可以理解想要的是什么

质疑

结果

现在确保只显示一个订单中有多个订单的记录。 我们使用COUNTDISTINCT OrderNumber>1筛选记录

质疑

结果

现在确保只显示一个订单中有多个订单的记录。 我们要确保筛选出所有记录都应该具有Fullfilled=T的记录。 我们使用COUNTDISTINCT OrderNumber>1和SUMFullfilled='T'=COUNTDISTINCT OrderNumber=1筛选记录

质疑

结果

最终查询

结果


您可以使用此选择查询来解决问题

SELECT CustomerNumber FROM `Orders` WHERE Fullfilled = 'T' GROUP BY CustomerNumber, Fullfilled HAVING COUNT(CustomerNumber)>1;

上面的子句WHERE Fullfilled='T'GROUP BY CustomerNumber,Fullfilled确保只有CustomerNumber具有Fullfilled='T'和COUNTCustomerNumber>1确保其OrderNumber>1

您可以使用此选择查询来解决问题

SELECT CustomerNumber FROM `Orders` WHERE Fullfilled = 'T' GROUP BY CustomerNumber, Fullfilled HAVING COUNT(CustomerNumber)>1;

上面的子句,其中Fullfilled='T'按CustomerNumber分组,Fullfilled确保只有CustomerNumber具有Fullfilled='T'并且COUNTCustomerNumber>1确保其OrderNumber>1

Do或not。没有尝试。一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。做还是不做。没有尝试。一个好的答案总是有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。本页有关于having条款的有用信息。本页有关于having条款的有用信息
SELECT
  CustomerNumber
FROM 
 t
GROUP BY
  CustomerNumber
HAVING
    COUNT(DISTINCT OrderNumber) > 1
  AND
    (SUM(Fullfilled = 'T') = COUNT(DISTINCT OrderNumber) = 1)
CustomerNumber  
----------------
001             
003             
SELECT CustomerNumber FROM `Orders` WHERE Fullfilled = 'T' GROUP BY CustomerNumber, Fullfilled HAVING COUNT(CustomerNumber)>1;