我有一张如下表:
Orderserialno SKU Units
1234-6789 2x3 5
1234-6789 4x5 7
1334-8905 4x5 2
1334-8905 6x10 2
我需要得到不同的orderserialno的计数,其中单位在ordererialno中不相等。 Sku的顺序可能比我提到的更多,但最终的目标是获得那些与各种SKU(按此顺序)相对应的单位不相等的订单。
在上述情况下,我应该得到答案为1,因为orderserialno 1234-6789有不同的单位。
由于
答案 0 :(得分:2)
这是一个相对简单的GROUP BY
查询:
SELECT Orderserialno, Units
FROM MyTable
GROUP BY Orderserialno, Units
HAVING COUNT(1) > 1
这将为您提供所有对(Orderserialno, Units)
。要预测Units
,请将此查询嵌套在DISTINCT
中,如下所示:
SELECT DICTINCT(Orderserialno) FROM (
SELECT Orderserialno, Units
FROM MyTable
GROUP BY Orderserialno, Units
HAVING COUNT(1) > 1
)
如果您只需要包含多个单元的Orderserialno
总数,请将DICTINCT(Orderserialno)
替换为COUNT(DICTINCT Orderserialno)
。
答案 1 :(得分:0)
要获取此类订单号的列表,请使用聚合查询:
select OrderSerialNo
from t
group by OrderSerialNo
having min(Units) <> max(Units)
这使用技巧来查看units
值是否发生变化。您可以使用count(distinct)
,但这通常会产生性能开销。相反,只需比较最小值和最大值。如果它们不同,则该值不是恒定的。
要获取计数,请将其用作子查询:
select count(*)
from (select OrderSerialNo
from t
group by OrderSerialNo
having min(Units) <> max(Units)
) t