我有這兩個表,我想查詢:
create table active_pairs
(
pair text,
exchange_id integer
);
create table exchanges
(
exchange_id integer
);
INSERT INTO active_pairs (pair, exchange_id)
VALUES ('London/Berlin', 2),
('London/Berlin', 3),
('Paris/Berlin', 4),
('Paris/Berlin', 3),
('Oslo/Berlin', 2),
('Huston/Berlin', 2);
INSERT INTO exchanges (exchange_id)
VALUES (2),
(3),
(4),
(3),
(2),
(2);
我嘗試使用此 SQL 查詢來獲取具有單個唯一記錄的pair列的記錄:
SELECT COUNT(cp)
FROM active_pairs cp
INNER JOIN exchanges ce on cp.exchange_id = ce.exchange_id
HAVING COUNT(pair) = 1
結果我應該得到2,因為它們是獨一無二的Oslo/Berlin。Huston/Berlin
但我得到空的結果。你能告訴我如何解決這個問題嗎?
uj5u.com熱心網友回復:
如果我理解正確,您希望獲得pair僅使用一次的值:
SELECT pair FROM active_pairs GROUP BY pair HAVING count(*) = 1
然后算一下:
SELECT count(*) FROM (
SELECT pair FROM active_pairs GROUP BY pair HAVING count(*) = 1
)
(可能有更有效的方法可以做到這一點,這就是我首先想到的。)
uj5u.com熱心網友回復:
據我了解這個問題,你想要這樣的東西:
SELECT COUNT(DISTINCT pair)
FROM active_pairs;
如果您想在其他列中查看唯一值,則只需添加, COUNT(DISTINCT your_column)
uj5u.com熱心網友回復:
您可以group by pair在表active_pairs中僅過濾僅pair出現一次的 s 并使用COUNT()視窗函式對它們進行計數:
SELECT DISTINCT COUNT(*) OVER () counter
FROM active_pairs
GROUP BY pair
HAVING COUNT(*) = 1;
請參閱演示。
uj5u.com熱心網友回復:
2?
-- what data is being queried (removed the WHERE)
SELECT COUNT(cp)
FROM active_pairs cp
INNER JOIN exchanges ce on cp.exchange_id = ce.exchange_id
首先我洗掉了 WHERE,但這給出了:
| 數數 |
|---|
| 14 |
-- added `GROUP BY pair`
SELECT pair, count(cp)
FROM active_pairs cp
GROUP BY pair
HAVING COUNT(*) = 1
等等,我應該使用 GROUP BY:
| 一對 | 數數 |
|---|---|
| 休斯頓/柏林 | 1 |
| 奧斯陸/柏林 | 1 |
然后也許添加最后一列得到2?:
SELECT SUM(cp)
FROM (
SELECT pair, count(cp) as cp
FROM active_pairs cp
GROUP BY pair
HAVING COUNT(*) = 1
) x
是的,結果是:2!
見:DBFIDDLE
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427599.html
標籤:sql PostgreSQL
