Postgresql:对具有相同值但顺序不同的行进行计数
我正在尝试计算如下表中的行:Postgresql:对具有相同值但顺序不同的行进行计数,sql,postgresql,Sql,Postgresql,我正在尝试计算如下表中的行: Product | Product2 | Value Coke | Lemon | 3 Coke | Potato | 4 Coke | Seven Up | 10 Lemon | Coke | 3 Lemon | Meat | 4 Pancake | Meat | 23 Potato | Coke | 4 Seven Up| Coke | 10 Meat
Product | Product2 | Value
Coke | Lemon | 3
Coke | Potato | 4
Coke | Seven Up | 10
Lemon | Coke | 3
Lemon | Meat | 4
Pancake | Meat | 23
Potato | Coke | 4
Seven Up| Coke | 10
Meat | Lemon | 4
Meat | Pancake | 23
我必须清点物品,但如果它们改变了顺序,我仍然必须清点一次。
所以在这种情况下,我会得到一个结果:5。
顺便说一下,我已经尝试过“where Product!=Product2”,但这还不够
有人能告诉我在这种情况下该怎么办吗?谢谢,基于,我们可以将行转换为数组,对数组进行排序,然后选择不同的值:
CREATE OR REPLACE FUNCTION array_sort (ANYARRAY)
RETURNS ANYARRAY LANGUAGE SQL
AS $$
SELECT ARRAY(SELECT unnest($1) ORDER BY 1)
$$;
除此之外:
SELECT count( distinct array_sort(array[product, product2] ) ) FROM your_table
希望对您有所帮助基于,我们可以将行转换为数组,对数组进行排序,然后选择不同的值:
CREATE OR REPLACE FUNCTION array_sort (ANYARRAY)
RETURNS ANYARRAY LANGUAGE SQL
AS $$
SELECT ARRAY(SELECT unnest($1) ORDER BY 1)
$$;
除此之外:
SELECT count( distinct array_sort(array[product, product2] ) ) FROM your_table
希望对您有所帮助因为您只有两列,您可以使用忽略列顺序:
select greatest(product, product2) as a,
least(product, product2) as b
from t
order by a, b
将为您提供:
Lemon | Coke
Lemon | Coke
Meat | Lemon
Meat | Lemon
Pancake | Meat
Pancake | Meat
Potato | Coke
Potato | Coke
Seven Up | Coke
Seven Up | Coke
然后抛出一个不同的
和计数
:
select count(
distinct (
greatest(product, product2),
least(product, product2)
)
)
from t
演示:由于您只有两列,因此可以使用忽略列顺序:
select greatest(product, product2) as a,
least(product, product2) as b
from t
order by a, b
将为您提供:
Lemon | Coke
Lemon | Coke
Meat | Lemon
Meat | Lemon
Pancake | Meat
Pancake | Meat
Potato | Coke
Potato | Coke
Seven Up | Coke
Seven Up | Coke
然后抛出一个不同的
和计数
:
select count(
distinct (
greatest(product, product2),
least(product, product2)
)
)
from t
演示:您能解释一下吗?什么中的5个?例如,我们数了一排:可乐、柠檬、3个。那我们就不能再数柠檬可乐了,因为柠檬跟可乐换了位置。所以应用这个想法,考虑这个表,结果是5。您知道如何使用SQL来完成吗?谢谢,你没有回答Houari的问题:5什么?如果你想计算不同产品的数量,那么(a)有6个,以及(b)为什么不这么说?@j_random_hacker:不同的无序对,即不同的
(产品,产品1)
对,其中(a,b)
和(b,a)
被认为是相同的。你能解释更多吗?什么中的5个?例如,我们数了一排:可乐、柠檬、3个。那我们就不能再数柠檬可乐了,因为柠檬跟可乐换了位置。所以应用这个想法,考虑这个表,结果是5。您知道如何使用SQL来完成吗?谢谢,你没有回答Houari的问题:5什么?如果你想计算不同产品的数量,那么(a)有6个,以及(b)为什么不这么说?@j_random_hacker:不同的无序对,即不同的(产品,产品1)
对,其中(a,b)
和(b,a)
被认为是相同的。这很好地推广到两个以上的产品列,其中最大的
/最小的
技巧不起作用:这很好地推广到两个以上的产品列,其中最大的
/最小的
技巧不起作用: