我有一个名为'purchases'的MySQL数据库表,其中填充了各种事务的记录。我想知道在一周的特定日期发生了多少交易,并且想知道如何使用SQL实现这一目标。我在这个表中有一个名为'submitted'的字段,它包含记录事务时的标准unix时间戳。
到目前为止我所拥有的:
SELECT COUNT(DISTINCT DATE_FORMAT(submitted,%a)) FROM purchases;
我的最终目标是在周一至周日的特定日期创建一个包含所有交易百分比的表格。
我的表格结构如下:
CREATE TABLE IF NOT EXISTS `purchases` (<br />
`id` int(11) NOT NULL AUTO_INCREMENT,<br />
`orderinfo` varchar(50) NOT NULL,<br />
`amount` varchar(5) NOT NULL,<br />
`reference` varchar(15) NOT NULL,<br />
`name` varchar(50) NOT NULL,<br />
`address` varchar(100) NOT NULL,
`town` varchar(50) NOT NULL,<br />
`postcode` varchar(12) NOT NULL,<br />
`submitted` int(11) NOT NULL,<br />
UNIQUE KEY `id` (`id`)<br />
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
答案 0 :(得分:1)
将时间戳转换为日期,然后取COUNT,这将获取计数和百分比
SELECT date ( from_unixtime(submitted) ), count(*) as `count`, count(*)/(select count(*) from purchases)*100 as percentage
FROM purchases
GROUP BY date ( from_unixtime(submitted) );
答案 1 :(得分:0)
你可以通过两个嵌套查询得到你想要的东西(分成更多的行并缩进以提高可读性)
SELECT
DAYOFWEEK(FROM_UNIXTIME(`submitted`)),
100 * COUNT(*) /
(SELECT COUNT(*) from `purchases`)
FROM
`purchases`
GROUP BY
DAYOFWEEK(FROM_UNIXTIME(`submitted`))
请注意,内部查询(SELECT COUNT(*) from purchases)
用于检索自您想要百分比数字以来的总购买次数。
mysql&#39; s DAYOFWEEK()
不返回当天的名称,而是返回1到7的索引号。
你可以在这里查看mysql date ant time函数的参考:
http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html
如果您只是需要查询,那么您已完成。
如果您想使用该查询构建视图,则无法在视图的定义中允许嵌套SELECT
。
然后,您可以在两个视图中拆分作业,一个只计算记录总数,另一个计算百分比。
关于表现的最后说明:
如果您要处理大量记录,则执行速度不是很快。
如果您计划经常运行查询,那就不好了。
在这种情况下,由于submitted
最有可能只写一次并且从未改变过,因此您可以考虑在表格中添加另一个名为submitted_dayofweek
的字段,键入int
。< / p>
更新subitted
后,还要submitted_dayofweek
更新存储DAYOFWEEK(FROM_UNIXTIME(submitted))
。
最后确保将submitted_dayofweek
编入索引。
查询变为
SELECT
`submitted_dayofweek`,
100 * COUNT(*) /
(SELECT COUNT(*) from `purchases`)
FROM
`purchases`
GROUP BY
`submitted_dayofweek`
并且会以更多的存储空间价格快速运行。