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