我想將計數(*)查詢的結果分組爲值桶。我在dellstore2 postgresql示例數據庫上測試了這一點。我的查詢下面返回正確的答案,但爲表中的每一行做了一次(幾千個相同的結果)。我可以通過在查詢結尾添加LIMIT 1
來解決這個問題,但是我想知道爲什麼我會收到重複項,以防指向更廣泛的問題。查詢是:爲什麼count(*)在此子查詢(postgresql)中返回多個結果?
SELECT
(SELECT count(*)
FROM
orders
WHERE
totalamount > 0 AND totalamount <= 100) AS ">0 <= 100",
(SELECT count(*)
FROM
orders
WHERE
totalamount > 100 AND totalamount <= 200) AS ">100 <= 200"
...
FROM
orders;
編輯 Andomar的回答也讓我發現下面的方法(改編自SQL簡而言之(O'Reilly)的一個例子)。這讓我可以在一列中放置桶,併爲每個桶/答案配對一排。我想我會將它包含在任何具有該用例的人中:
SELECT CASE
WHEN totalamount IS NULL THEN 'Unknown'
WHEN totalamount <= 100 THEN 'Not more than 100'
WHEN totalamount <= 200 THEN 'Not more than 200'
ELSE 'Over 200'
END "Bucket",
COUNT(*) "Number of results"
FROM
orders
GROUP BY CASE
WHEN totalamount IS NULL THEN 'Unknown'
WHEN totalamount <= 100 THEN 'Not more than 100'
WHEN totalamount <= 200 THEN 'Not more than 200'
ELSE 'Over 200'
END
ORDER BY
MIN(totalamount);
似乎有幾個圓括號缺失。請發佈真實的代碼。 – wildplasser 2012-03-20 12:11:12
感謝wildplasser - 現在修復了(我正在處理兩臺未連接的機器,因此無法剪切和粘貼)。 – 2012-03-20 12:18:08