2015-11-02 60 views
1

我想查看一下我的Postgres數據庫上的小部件獲得created_at的一週中最常見的一天。在Postgres表中獲取列中最常用的一週

這是盡我所能,但它返回我平均(3.744 ...),而不是一個整數代表最常見的星期幾。有誰知道我可以如何改善這一點?

SELECT AVG(start_day) AS start_day 
FROM (SELECT date_part('dow', created_at) AS start_day 
     FROM widgets) TMP; 
+1

集團由date_part數,並通過數順序(降序)? (我知道C#中的LINQ是什麼,但是我不想假設我可以得到SQL的權利......) –

回答

1
SELECT date_part('dow', created_at) AS start_day 
    FROM widgets 
GROUP BY date_part('dow', created_at) 
ORDER BY COUNT(*) DESC 
LIMIT 1 
1
SELECT start_day, count(*) 
FROM (
    SELECT date_part('dow', created_at) AS start_day 
    FROM widgets) sub 
GROUP BY 1 
ORDER BY 2 DESC 
LIMIT 1; 
+0

我質疑你爲什麼選擇使用子查詢,但是我發現你避免了重複的計算的星期幾。 –

+0

@KenGeis在單個查詢中使用相同的函數調用兩次並不意味着它會被評估兩次,查詢規劃器比這更聰明。使用子查詢產生的代碼更容易理解恕我直言,我們的答案的查詢計劃是_exactly_相同:http://www.sqlfiddle.com/#!15/22bcb/3。您之前的解決方案 - 減去顯而易見的錯誤 - 稍微慢一點,但非常相似。 – Patrick

+0

是的,我應該說你避免重複星期幾表達的聲明。 –