mysql - 根据mysql中的计算字段对数据进行分组和计数?

标签 mysql group-by field

我在 mysql 中有两个表记录特定事件发生的日期。

  • 表 1:(id、session_id、日期)
  • 表 2:(id、session_date)

Table1 是主表,我只在其中写入 session_id(在这种情况下,日期是从 Table2 的匹配记录中获取的)或日期。我未填写的字段保持为 NULL。

现在,我想计算该事件每月/每年发生的次数,并且如果可能的话,仅在特定日期(例如 2013 年 1 月 1 日)之后执行该过程。

这是我到目前为止所做的,我创建了另一个日期字段(称为 date_final),它保存每行的非 NULL 值,因此我尝试根据该字段对数据进行分组。

SELECT table1.date AS date1, 
       table2.session_date AS date2, 
       @date_final := CONCAT_WS('', table1.date, table2.session_date) AS date_final,
       MONTHNAME(@date_final) AS `month`,
       YEAR(@date_final) AS `year`   
FROM table1
LEFT JOIN table2 ON table2.id = table1.session_id
GROUP BY YEAR(@date_final), MONTH(@date_final)

显然这效果不太好,所以我在这里。 MySQL 每月/每年仅向我返回一些值,这不好。当我添加 COUNT(*) 子句时,情况会变得更糟。我只是 mysql 的新手,我想我已经陷入了困境:P

##Sample data for Table1##
#id  session_id  date#
1            1  NULL
2         NULL  2013-01-04
3            2  NULL
4         NULL  2013-01-20
5         NULL  2013-02-22
6            3  NULL

##Sample data for Table2##
#id  session_date#
1       2013-01-02
2       2013-01-10
3       2013-03-02

预期结果?像这样的东西:

2013  January  3
2013  February 2
2013  March    1

最佳答案

其中一个可能是您打算:

SELECT table1.date AS date1, 
       table2.session_date AS date2, 
       coalesce(table1.date, table2.session_date) AS date_final,
       MONTHNAME(coalesce(table1.date, table2.session_date)) AS `month`,
       YEAR(coalesce(table1.date, table2.session_date)) AS `year`   
FROM table1 LEFT JOIN
     table2
     ON table2.id = table1.session_id
GROUP BY MONTHNAME(coalesce(table1.date, table2.session_date)),
         YEAR(coalesce(table1.date, table2.session_date))
order by `month`, `year`;

为此,您不需要 session 变量。

关于mysql - 根据mysql中的计算字段对数据进行分组和计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20818123/

相关文章:

mysql - Perl DBI、MySQL 中带有 ő 和 ű 字符的 UTF8 字符编码

java - 在 Java 中,如果子类具有不同的类型,我可以以某种方式将字段移动到父类(super class)吗?

php - 违反完整性约束 : 1062 Duplicate entry for utf8_unicode_ci collation

mysql - SQL查询以获取与另一列的MAX值对应的列值?

mysql - Laravel query builder - 如何按别名分组,或做原始 groupBy

mysql - 如何在 mysql 组中对记录进行排序?

c# - `global variable` 和 `field` 之间的区别?

grails - 在哪里记录了称为 “field(n)”的grails函数?

mysql - 具有 70% 空值的列的索引 : Use null or empty value?

php - 如何从 MySQL 和 PHP 中的 500 万行记分牌中获得排名?