我有這個表:只使用SQL,而不是選擇組由
supplier | product | qty
--------------------------
s1 | p1 | 300
s1 | p2 | 90
s2 | p3 | 89
我想找到供應商超過2種產品。 但只有選擇和在哪裏,沒有group by
。任何建議?
我有這個表:只使用SQL,而不是選擇組由
supplier | product | qty
--------------------------
s1 | p1 | 300
s1 | p2 | 90
s2 | p3 | 89
我想找到供應商超過2種產品。 但只有選擇和在哪裏,沒有group by
。任何建議?
爲什麼你想不使用組超越我,但是這可能工作:
SELECT Supplier FROM table outer WHERE
(
select count(Products) from table inner
where inner.Supplier = outer.Supplier
) > 2
請記住,該組由爲東西做出這樣的,應該被使用。
這使用一個*隱含* GROUP BY。你可能沒有輸入字母,但通過使用* COUNT(*)等*聚合函數,你會得到一個。 – MatBailie 2012-01-06 15:15:43
;WITH T AS
(
SELECT *,
COUNT(*) OVER (PARTITION BY S) AS Cnt
FROM YourTable
)
SELECT DISTINCT S
FROM T
WHERE Cnt > 2
+1 - 堅持使用聚合請求的信件。做得很好! – JNK 2012-01-06 14:51:37
在平時parts and suppliers database,這個relvar名爲SP
:
SELECT DISTINCT T1.SNO
FROM SP AS T1
JOIN SP AS T2
ON T1.SNO = T2.SNO
AND T2.PNO <> T1.PNO
JOIN SP AS T3
ON T1.SNO = T3.SNO
AND T3.PNO <> T1.PNO
AND T3.PNO <> T2.PNO;
注意到,您可以使用HAVING
沒有GROUP BY
:
SELECT DISTINCT T1.SNO
FROM SP AS T1
WHERE EXISTS (
SELECT 1
FROM SP AS T2
WHERE T2.SNO = T1.SNO
HAVING COUNT(*) > 2
);
與子查詢:
select distinct supplier
from table a
where (select count(*)
from table b
where b.supplier = a.supplier and b.product <> a.product
) > 1
;WITH
sequenced_data AS
(
SELECT
supplier,
ROW_NUMBER() OVER (PARTITION BY supplier ORDER BY product) AS supplier_product_ordinal
FROM
YourTable
)
SELECT
supplier
FROM
sequenced_data
WHERE
supplier_product_ordinal = 3
但我希望它比使用GROUP BY更慢。
SELECT DISTINCT
supplier
FROM
yourTable
WHERE
EXISTS (SELECT * FROM yourTable AS lookup WHERE supplier = yourTable.supplier AND product < yourTable.product)
AND EXISTS (SELECT * FROM yourTable AS lookup WHERE supplier = yourTable.supplier AND product > yourTable.product);
+1我喜歡子查詢的'>'和'<'邏輯,整潔:) – onedaywhen 2012-01-06 15:41:11
哈哈,第二個查詢很有趣,像我一樣,但更聰明一步。無論如何,+1 – 2012-01-06 15:45:03
爲什麼你不希望通過使用組? – 2012-01-06 14:47:25
你的問題就像說「我想選擇某個記錄而不使用WHERE」。 GROUP BY存在是有原因的。此外,在這種情況下,它完全適用於您的需求。如果你想避免它,因爲你不明白它,我建議你閱讀它(W3學校有一個很好的網頁),並學習如何正確編碼。因爲你不明白一個概念,所以一旦你的代碼變得更加複雜,往往會在以後導致你成爲大問題。 – 2012-01-06 14:48:54
您使用的是什麼RDBMS? – Lamak 2012-01-06 14:50:29