`
lovejuan1314
  • 浏览: 342870 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于一条查询语句的讨论

SQL 
阅读更多
由于数据仓库中某表数据达到137,669,168条记录,但是我们需要对该表中的数据做某些特殊的业务处理。因此,我们决定按天来划分出一些统计表。
我首先写出的SQL语句是:
create table views_ads_date 
as select a.user_id,count(b.id) as Impressions,b.crdate as DateRange 
from ads a join views b on a.id = b.ad_id 
group by a.user_id,b.crdate;

Marcus指出这样存在问题:
No, this will not group per day. This will group per millisecond.
select a.user_id,count(b.id) as Impressions,
to_char(b.crdate, 'YYYY-MM-DD') as DateRange 
from ads a join views b on a.id = b.ad_id 
group by a.user_id,DateRange;

Marcus再次指出这样在性能上会有问题:
No. You'll convert the date to a string which is slow to search on.
select a.user_id,count(b.id) as Impressions,b.crdate::date as DateRange 
from ads a join views b on a.id = b.ad_id 
group by a.user_id,DateRange;

Marcus反问为什么不直接使用date函数。
因为我在测试的时候,发现用date_extract返回的格式是:0000-00-00 00:00:00,而我想要YYYY-MM-DD的格式,所以就那样写了。
结果,Marcus告知我:No, the format isn't that. It is PRINTED as that. The format is a binary number of the amount of microseconds since 1976-01-01 I think it is.

Big difference. You want this type because it is fast to search at.

最终:
create table views_ads_date as select a.user_id,count(b.id) as Impressions,date_trunc('day',b.crdate) as DateRange 
from ads a join views b on a.id = b.ad_id 
group by a.user_id,DateRange;


分享到:
评论

相关推荐

    数据库函数和查询语句

    例如,`INSERT INTO customers(cust_id,state,post_code) VALUES('Ariel',NULL,'94501')`将向`customers`表中插入一条新记录,其中`state`字段为NULL。`NULL`关键字在SQL中代表未知或未定义的值。 `UPDATE`命令用于...

    XML查询语句转换成SQL语句的实现.pdf

    将 XPath、XQuery 语句转换成 SQL 语句的算法实现示例程序清单显示了把一条 XPath 句翻译成 SQL 的算法。其中 Edge 表是将 XML 文档编码存入关系数据库后产生的表。算法首先产生 SQL 语句段来选择被存储的文档的根...

    access_sql查询语句

    - `$offset`表示从第一条记录开始跳过的记录数。 4. **构建分页SQL查询**: - 当是第一页时(即`$page == 1`),直接查询前`$rsofpage`条记录:`SELECT TOP $rsofpage * FROM {$_pre}news ORDER BY nid DESC` - ...

    oracle查看执行最慢与查询次数最多的sql语句

    接下来,我们讨论如何找出查询次数最多的SQL语句。同样,我们可以利用`v$sql`视图,但这次关注的是执行次数而非执行时间: ```sql SELECT s.SQL_TEXT, s.EXECUTIONS "执行次数", s.PARSING_USER_ID "用户名",...

    存储过程中怎么动态执行sql语句

    4. **执行SQL语句并获取结果**:利用`EXECUTE IMMEDIATE`执行SQL查询,并将结果集中的第一列(即记录数)赋值给变量`N`。 5. **输出结果**:最后通过`DBMS_OUTPUT.PUT_LINE`函数输出查询结果。 ##### 示例二:创建...

    javascript语句

    `if`语句可以与语句块结合使用,包含多条语句。 接下来,我们将讨论循环语句,如`for`、`while`和`do...while`,它们用于重复执行一段代码直到满足特定条件。循环语句在处理数组、遍历对象属性或重复执行任务时非常...

    MySQL数据库中group by语句与update语句的用法研究.pdf

    MySQL 数据库中 group by 语句与 update 语句的用法研究 本论文对 MySQL 数据库中的 group by 语句和 update 语句...在使用 update 语句时,在同一条查询语句中不能直接从某表中查出数据再更新或删除本表中的数据。

    一个查询的SQL语句请教,希望能够用一条SQL语句得到结果

    在本篇知识点中,我们将讨论如何使用SQL语句来解决一个实际的问题,即从表X中去除表Y中关键字相同的数据,再加上表Z中的数据,并对关键字相同的数据进行累计。本篇知识点将详细解释SQL语句的设计思路和实现过程。 ...

    数据库操作语句

    - 正确的查询语句是选项D,它通过`ORDER BY Sage`对年龄进行排序,并使用`TOP 1`选取第一条记录,即年龄最小的学生。 7. **Case 函数**: - 正确的Case表达式用于将成绩转换为等级是选项C。在SQL中,Case语句通常...

    SQLServer语句优化

    例如,在一个包含1000万条记录的表中查询所有数据,即使数据行已经被物理排序,但由于没有特定的筛选条件,仍然需要扫描整个表。 2. **在主键上建立聚集索引,在日期列上建立非聚集索引**:如果在主键上建立了聚集...

    关于SQL Server查询语句的使用

    这些只是SQL Server查询语句的基本用法,实际上还有许多其他功能,如`JOINs`、`GROUP BY`、`HAVING`等,它们都是数据库查询不可或缺的一部分。掌握这些基础,将有助于你在处理SQL Server中的数据时更加游刃有余。

    数据库数据导出到insert 语句

    对于大型数据集,直接生成INSERT语句可能效率较低,因为每个记录都会生成一条单独的INSERT语句。这时,可以考虑使用`LOAD DATA INFILE`(MySQL)或`COPY`(PostgreSQL)命令,它们能更快地导入大量数据。 总的来说...

    双分支条件语句的递归下降翻译程序设计

    本文主要讨论了如何使用递归下降分析法来实现双分支条件语句的翻译,并给出了具体的文法、属性文法以及翻译后的四元式结果。双分支条件语句在编程语言中是一种非常常见的结构,它允许根据一个布尔表达式的真假执行...

    DB2常用的几条命令语句

    这篇博客主要讨论了DB2中的一些常用命令语句,对于理解和操作DB2数据库至关重要。在深入讲解这些命令之前,我们先来了解DB2的基础知识。 1. **安装与启动DB2** 在安装DB2后,可以通过`db2start`命令启动数据库服务...

    在Visual Foxpro中使用SQL语句查找两个表中相同或不同的记录.pdf

    这条语句将生成一个新表,其中包含 XSDA 表中没有参加计算机考试的学生姓名和学号。 Visual Foxpro 中的 SQL 语句提供了强大的数据处理和分析功能,用户可以使用这些语句来查找两个表中相同或不同的记录,并生成新...

    经典SQL语句大全

    5. CREATE TABLE tab_new AS SELECT col1, col2… FROM tab_old:这条语句创建一个新表,并将从指定旧表中查询出的结果集作为新表的内容。 6. DROP TABLE tabname:这条语句用于删除一个指定的表。在执行此操作前,...

    JAVA四条语句修改SQL

    本资源针对初学者提供了关于使用Java操作数据库的四个基本语句:增、删、改、查,这是数据库管理的基础。下面我们将详细讨论这四个方面。 首先,"增"指的是插入数据。在Java中,我们通常使用JDBC(Java Database ...

    javaif语句和switch语句.pdf

    当if或else后的代码不止一条时,应该使用大括号{}创建一个代码块,以确保代码的清晰性和可读性。不使用大括号可能会导致误解,比如: ```java int bytesAvailable; if (bytesAvailable > 0) { ProcessData(); ...

    mysql语句大全及用法

    终止一条语句 使用 `Ctrl+C` 键可以终止当前语句的执行。 ### 5. 退出 MySQL 使用 `exit` 语句可以退出 MySQL 命令行工具。 查看“演示数据”的表结构 ### 1. 查看和指定现有的数据库 使用 `SHOW DATABASES` ...

    T-SQL 高级语句

    例如,在一个大型表中,如果我们只需要查看前几条记录,可以使用TOP关键字指定返回的记录数。在SQL Server中,语法是`SELECT TOP number|percent column_name(s) FROM table_name`。如果`number`是一个数字,它将...

Global site tag (gtag.js) - Google Analytics