Sql 获取Postgres表中列的最常见的星期几
我想看看一周中最常见的一天,小部件在我的Postgres数据库中被创建 这是我所能得到的,但它返回的是一个平均值(3.744…),而不是一个表示一周中最常见的一天的整数。有人知道我该如何改进吗Sql 获取Postgres表中列的最常见的星期几,sql,postgresql,select,Sql,Postgresql,Select,我想看看一周中最常见的一天,小部件在我的Postgres数据库中被创建 这是我所能得到的,但它返回的是一个平均值(3.744…),而不是一个表示一周中最常见的一天的整数。有人知道我该如何改进吗 SELECT AVG(start_day) AS start_day FROM (SELECT date_part('dow', created_at) AS start_day FROM widgets) TMP; 按日期分组,按计数排序(降序)?(我知道C#中的LINQ是什么,但我不想假
SELECT AVG(start_day) AS start_day
FROM (SELECT date_part('dow', created_at) AS start_day
FROM widgets) TMP;
按日期分组,按计数排序(降序)?(我知道C#中的LINQ是什么,但我不想假设我可以正确使用SQL…)我质疑您为什么选择使用子查询,但我发现您可以避免重复计算星期几。@KenGeis在一个查询中使用相同的函数调用两次并不意味着它会被计算两次,查询计划器比这更聪明。使用子查询生成更容易理解的代码IMHO,我们两个答案的查询计划完全相同:。您先前的解决方案(减去明显的错误)稍微慢一些,但非常具有可比性。是的,我应该说您避免重复星期几的声明表达式。
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;