select 行如何在 sql 中查询
select rows how to query in sql
我有一个像
这样的用例
a 3
a 4
a 5
a 6
a 5
b 3
b 5
b 3
如何得到类似
的输出
a 4
a 5
b 5
b 3
选择 a 和 b 的高度数,但只有 2 行
那是我现在写的查询,好像不起作用
SELECT id, barcode, actualsku, inventorycount
FROM ( SELECT pallet.id AS id,
pallet.barcode AS barcode,
inventoryunit.sku AS actualsku,
Count(inventoryunit.id) AS inventorycount
FROM (SELECT *
FROM mft.asset
WHERE container_type = 'PALLET'
AND location_type = 'PRIME' :: mft.location_type
AND is_deleted = FALSE
AND ( attributes ->> 'sku' :: text ) IS NOT NULL) pallet
LEFT OUTER JOIN (SELECT *
FROM mft.asset
WHERE asset_type = 'INVENTORYUNIT' :: mft.asset_type
AND is_deleted = FALSE) inventoryunit
ON pallet.id = inventoryunit.parent_id
GROUP BY inventoryunit.sku,
pallet.id,
pallet.barcode,
pallet.attributes ) test
WHERE (SELECT COUNT(*) FROM test as t
WHERE t.actualsku = test.actualsku
AND t.inventorycount <= test.inventorycount
) <= 2
这通常使用 window 函数完成:
select col1, col2
from (
select col1, col2,
row_number() over (partition by col1 order by col2 desc) as rnk
from the_table
) t
where rnk <= 2
order by col1, col2;
我有一个像
这样的用例a 3
a 4
a 5
a 6
a 5
b 3
b 5
b 3
如何得到类似
的输出a 4
a 5
b 5
b 3
选择 a 和 b 的高度数,但只有 2 行
那是我现在写的查询,好像不起作用
SELECT id, barcode, actualsku, inventorycount
FROM ( SELECT pallet.id AS id,
pallet.barcode AS barcode,
inventoryunit.sku AS actualsku,
Count(inventoryunit.id) AS inventorycount
FROM (SELECT *
FROM mft.asset
WHERE container_type = 'PALLET'
AND location_type = 'PRIME' :: mft.location_type
AND is_deleted = FALSE
AND ( attributes ->> 'sku' :: text ) IS NOT NULL) pallet
LEFT OUTER JOIN (SELECT *
FROM mft.asset
WHERE asset_type = 'INVENTORYUNIT' :: mft.asset_type
AND is_deleted = FALSE) inventoryunit
ON pallet.id = inventoryunit.parent_id
GROUP BY inventoryunit.sku,
pallet.id,
pallet.barcode,
pallet.attributes ) test
WHERE (SELECT COUNT(*) FROM test as t
WHERE t.actualsku = test.actualsku
AND t.inventorycount <= test.inventorycount
) <= 2
这通常使用 window 函数完成:
select col1, col2
from (
select col1, col2,
row_number() over (partition by col1 order by col2 desc) as rnk
from the_table
) t
where rnk <= 2
order by col1, col2;