我想查看一下我的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;
我想查看一下我的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;
SELECT date_part('dow', created_at) AS start_day
FROM widgets
GROUP BY date_part('dow', created_at)
ORDER BY COUNT(*) DESC
LIMIT 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;
我質疑你爲什麼選擇使用子查詢,但是我發現你避免了重複的計算的星期幾。 –
@KenGeis在單個查詢中使用相同的函數調用兩次並不意味着它會被評估兩次,查詢規劃器比這更聰明。使用子查詢產生的代碼更容易理解恕我直言,我們的答案的查詢計劃是_exactly_相同:http://www.sqlfiddle.com/#!15/22bcb/3。您之前的解決方案 - 減去顯而易見的錯誤 - 稍微慢一點,但非常相似。 – Patrick
是的,我應該說你避免重複星期幾表達的聲明。 –
集團由date_part數,並通過數順序(降序)? (我知道C#中的LINQ是什麼,但是我不想假設我可以得到SQL的權利......) –