我有从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;
我想要的结果附在下面。它总是选择日期的开始,然后选择每个月,然后只计算电子邮件总数。
答案 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();