本文的目的是介绍每天计算/统计mysql结果的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同时也不会遗漏关于JSON编码MySQL结果、linuxC++读取mysql结果保存、mysql
本文的目的是介绍每天计算/统计mysql结果的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同时也不会遗漏关于JSON编码MySQL结果、linux C++ 读取mysql结果保存、mysql – 如何分组SQL结果、mysql-为每组分组的SQL结果获取具有最大值的记录的知识。
本文目录一览:每天计算/统计mysql结果
可以说我有一个名为’ signups
‘的mysql表,具有以下值:
Name Signup Datedog 2008-05-14 18:53:30cat 2008-05-14 12:13:20mouse 2008-05-14 08:51:32giraffe 2008-05-15 22:13:31Moose 2008-05-16 13:20:30monkey 2008-05-16 08:51:32mongoose 2008-05-16 22:13:31fish 2008-05-16 13:00:30
我想生成一份报告,说明每天有多少只动物报名(我不在乎一天中的时间)。因此,我从上面的示例表中寻找的最终结果是:
Date Signups2008-05-14 32008-05-15 12008-05-16 4
有没有一种方法可以在mysql中执行此操作,或者我需要使用另一种语言(如PHP)来计算总数吗?
任何想法表示赞赏,谢谢
答案1
小编典典SELECT DATE(Signup_Date) AS `Date` , COUNT(*) AS Signups FROM `signups` GROUP BY DATE(Signup_Date)
会给您您所追求的。
JSON编码MySQL结果
如何将json_encode()
函数与MySQL查询结果一起使用?我需要遍历行还是可以将其应用于整个结果对象?
linux C++ 读取mysql结果保存
c++读取mysql数据库结果保存
#include <fstream>
#include <iomanip>
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <sstream>
#include <mysql/mysql.h>
#include <stdlib.h>
using namespace std;
//数据库地址密码
string g_Server = "localhost";
string g_User = "root";
string g_Password = "467";
string g_Database = "test";
//vector 输出
void printVevtorVal(vector <string> strVal)
{
vector<string>::iterator itr = strVal.begin();
for(itr;itr!=strVal.end();itr++)
{
cout << (*itr) << " ";
}
cout << endl;
}
//vector二维表 输出
void printTableVal(vector <vector <string> > strVal)
{
vector <vector <string> >::iterator itr = strVal.begin();
for(itr;itr!=strVal.end();itr++)
{
vector<string>::iterator tmp = (*itr).begin();
for(tmp;tmp!=(*itr).end();tmp++)
{
cout << setw(10) << left << (*tmp);
}
cout << endl;
}
}
//查询数据库结果只有一个值
string getStrValSql(string strSql)
{
string strvals = "";
MYSQL *conn;
MYSQL_RES *res;
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, g_Server.c_str(),g_User.c_str(), g_Password.c_str(), g_Database.c_str(),0, NULL, 0))
{
return "";
}
mysql_query(conn, strSql.c_str()); //执行sql语句
res = mysql_store_result(conn); //将查询结果装进MYSQL_RES
if(!res) //sql执行结果判断
{
return "";
}
int rows = mysql_num_rows(res); //获取结果行数
while(rows--)
{
MYSQL_ROW row = mysql_fetch_row(res); //从结果集中获取一行
strvals = (row[0] == NULL ? "":row[0]);
}
mysql_free_result(res); //查询完后记得要释放
mysql_close(conn);
return strvals;
}
//数据库查询只有一行或者一列,返回vector
void getVecValSql(string strSql, vector<string> &vecVals)
{
MYSQL *conn;
MYSQL_RES *res;
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, g_Server.c_str(),g_User.c_str(), g_Password.c_str(), g_Database.c_str(),0, NULL, 0))
{
return ;
}
mysql_query(conn, strSql.c_str());
res = mysql_store_result(conn);
if(!res)
{
return ;
}
int rows = mysql_num_rows(res);
if( rows == 1)
{
int cols = mysql_num_fields(res);
int intTmp = 0;
MYSQL_ROW row = mysql_fetch_row(res);
while(intTmp < cols)
{
vecVals.push_back(row[intTmp] == NULL ? "":row[intTmp]);
intTmp++;
}
}
else
{
while(rows--)
{
MYSQL_ROW row = mysql_fetch_row(res);
vecVals.push_back(row[0] == NULL ? "":row[0]);
}
}
mysql_free_result(res);
mysql_close(conn);
}
//数据库查询返回二维表
void getTableValSql(string strSql,vector <vector <string> > &vecVals)
{
MYSQL *conn;
MYSQL_RES *res;
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, g_Server.c_str(),g_User.c_str(), g_Password.c_str(), g_Database.c_str(),0, NULL, 0))
{
return ;
}
mysql_query(conn, strSql.c_str());
res = mysql_store_result(conn);
if(!res)
{
return ;
}
int rows = mysql_num_rows(res);
int cols = mysql_num_fields(res);
while(rows--)
{
int intTmp = 0;
vector <string> tmp;
MYSQL_ROW row = mysql_fetch_row(res);
while(intTmp < cols)
{
tmp.push_back(row[intTmp] == NULL ? "":row[intTmp]);
intTmp++;
}
vecVals.push_back(tmp);
}
mysql_free_result(res);
mysql_close(conn);
}
mysql – 如何分组SQL结果
我在数据库中有以下数据
MAILFROM,MAILTO,TIMESTAMP,MESSAGE
A B 2013-07-01 12:11:12,Hi
B A 2013-07-01 12:12:12,Hi back
A B 2013-07-01 12:13:12,How are you
A C 2013-07-01 12:14:12,Hi there
D A 2013-07-01 12:16:12,Hi
C D 2013-07-01 12:17:12,Hi
如何将其与select组合,以便我得到
C’评论发生3次
SELECT MAILFROM,MAILTO FROM messages WHERE 'A' IN(FROM,TO) GROUP BY FROM
给
一个C.
以及
C A但我希望组合在一起.
它只显示A C 3次
该示例是一个邮箱.
这包含:
MAILFROM,Hi
sql列表应该列出这个(唯一的对话)
B 2013-07-01 12:13:12,"Hi" ' Remark Timestap of the latest message
C 2013-07-01 12:14:12,"Hi there"
D 2013-07-01 12:16:12,"Hi"
C D 2013-07-01 12:17:12,"Hi" ' THIS SHOULD NOT BE SHOWN
这意味着这个sql将列出他作为发送者和接收者(从,到)的消息.它应该只列在这个人和发送给谁的人之间,无论谁是MAILFROM或MAILTO.时间戳是他们之间最新消息的日期…备注他永远不会发送到D,无论如何都列出了一个,但是他发送但没有得到任何东西…… B之间是3条消息.所以输出应该只有这3行..
select least("from","to") as party1,greatest("from","to") as party2,count(*) as NumMessages,max(timestamp) as maxtimestamp
from messages
group by least("from","to"),"to") ;
以下使用案例isntead(标准sql),并且应该在大多数数据库中工作:
select (case when "from" < "to" then "from" else "to" end) as party1,(case when "from" < "to" then "to" else "from" end) as party2,max(timestamp) as maxtimestamp
from messages
group by (case when "from" < "to" then "from" else "to" end),(case when "from" < "to" then "to" else "from" end)
编辑:
如果您希望将此作为给定人员的唯一消息:
select (case when "from" = const.ThePerson then "to" else "from" end) as Other,max(timestamp) as maxtimestamp
from messages m cross join
(select 'A' as ThePerson) const
where const.ThePerson in ("from","to")
group by "from","to";
要获取最后一条消息,您需要加入原始数据:
select Other,NumMessages,MaxTimeStamp,m.message
from (select (case when "from" = const.ThePerson then "to" else "from" end) as Other,max(timestamp) as maxtimestamp,max(ThePerson) as ThePerson,from messages m cross join
(select 'A' as ThePerson) const
where const.ThePerson in ("from","to")
group by "from","to"
) t join
messages m
on m."from" in (t.Other,t.ThePerson) and
m."to" in (t.Other,t.ThePerson) and
m.TimeStamp = t.maxtimestamp
mysql-为每组分组的SQL结果获取具有最大值的记录
您可以使用row_number()
:
select *
from (
select t.*,row_number() over(partition by group order by age desc,person) rn
from mytable t
) t
where rn = 1
链接文章的可接受答案使我感到困惑。它依赖于选项ONLY_FULL_GROUP_BY
被禁用(好吧,那是MySQL 5.6中的默认设置)。它对MySQL在这种情况下的行为方式做出了假设,我认为这在任何地方都没有正式记载。即使在MySQL 5.6中,我也不会建议这样做。令人高兴的是,another answer的投票更多,似乎是解决问题的一种更为安全的方法。
您可以通过这种方式进行操作
CREATE TABLE table1 ( `Person` VARCHAR(5),`Group` INTEGER,`Age` INTEGER ); INSERT INTO table1 (`Person`,`Group`,`Age`) VALUES ('Bob','1','32'),('Jill','34'),('Shawn','42'),('Jake','2','29'),('Paul','36'),('Laura','39');
SELECT `Person`,`Age` FROM table1 s1 WHERE `Age`=(SELECT MAX(s2.`Age`) FROM table1 s2 WHERE s1.`Group` = s2.`Group`)
Person | Group | Age :----- | ----: | --: Shawn | 1 | 42 Laura | 2 | 39
db 提琴here
今天关于每天计算/统计mysql结果的介绍到此结束,谢谢您的阅读,有关JSON编码MySQL结果、linux C++ 读取mysql结果保存、mysql – 如何分组SQL结果、mysql-为每组分组的SQL结果获取具有最大值的记录等更多相关知识的信息可以在本站进行查询。
本文标签: