从日期开始到当前月份/年份的SQL计数数据

时间:2020-03-18 22:26:49

标签: mysql sql database group-by subquery

我有从2019年3月到2020年2月的客户数据。我在计算购买机票的电子邮件总数,接着是每月,我使用的查询是

  SELECT sub.monthNameYear,sub.monthName,count(*) from
 (SELECT DATE_FORMAT(`reservation_for`,'%Y-%m') as monthNameYear,DATE_FORMAT(`reservation_for`,'%M %Y') as monthName,
         email,
         COUNT(*) AS 'Count'
  FROM `tablename`
  GROUP BY email, DATE_FORMAT(`reservation_for`, '%Y-%m') 
           HAVING COUNT(*) > 1 
  ORDER BY DATE_FORMAT(`reservation_for`, '%Y-%m') ) as sub
GROUP BY sub.monthNameYear;

我想要的结果附在下面。它总是选择日期的开始,然后选择每个月,然后只计算电子邮件总数。

EXPECTED RESULT

2 个答案:

答案 0 :(得分:0)

如果运行的是MySQL 8.0,则可以进行窗口加和。从现有查询开始:

<div class="container">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>

注意:

  • 总是枚举SELECT monthNameYear, monthName, SUM(COUNT(*)) OVER(ORDER BY monthNameYear) totalPurchase FROM ( SELECT DATE_FORMAT(`reservation_for`,'%Y-%m') monthNameYear, DATE_FORMAT(`reservation_for`,'%M %Y') monthName, email FROM `tablename` GROUP BY monthNameYear, monthName, email HAVING COUNT(*) > 1 ) as sub GROUP BY monthNameYear, monthName ORDER BY monthNameYear; 子句中所有未汇总的列

  • group by子句应放在外部查询中

  • 您正在order by使用select select`子句

答案 1 :(得分:0)

您可以使用窗口功能:

stream file; 
file.open("cout.txt", ios::out); 
string line; 

// Backup streambuffers of  cout 
streambuf* stream_buffer_cout = cout.rdbuf(); 
streambuf* stream_buffer_cin = cin.rdbuf(); 

// Get the streambuffer of the file 
streambuf* stream_buffer_file = file.rdbuf(); 

// Redirect cout to file 
cout.rdbuf(stream_buffer_file); 

cout << "This line written to file" << endl; 

// Redirect cout back to screen 
cout.rdbuf(stream_buffer_cout); 
cout << "This line is written to screen" << endl; 

file.close();
相关问题