有两张桌子
用户
+--+----+
|id|name|
+--+----+
1 A
2 B
Run Code Online (Sandbox Code Playgroud)
命令
+--+--------+-------+-------+
|id|subtotal|created|user_id|
+--+--------+-------+-------+
1 10 1000001 1
2 20 1000002 1
3 10 1000003 2
4 10 1000005 1
Run Code Online (Sandbox Code Playgroud)
这个想法是让AVG,SUM并从用户的最后创建的订单.
SELECT
users.name,
users.phone,
SUM(a.subtotal),
COALESCE(a.created, NULL)
FROM users
LEFT JOIN
(
SELECT
orders.id,
orders.subtotal,
orders.user_id,
orders.created
FROM
orders
JOIN(
SELECT MAX(i.created) created, i.user_id
FROM orders i
GROUP BY i.user_id
)AS j ON(j.user_id = orders.user_id AND orders.created = j.created) GROUP BY orders.user_id
) AS a ON users.id …Run Code Online (Sandbox Code Playgroud) 所以我有一个小程序
#include <iostream>
using namespace std;
void lol() {
cout << "How did we get here?"<<std::endl;
}
int main()
{
long a, b, z[10];
cin >> a >> b;
z[a] = b;
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处通过在线编译器运行它
该程序没有任何目的,但它有一个错误或功能 - 我不知道它是什么.所以,如果你写这样的东西,
main 13 2015你可能什么也得不到,但是如果你输入两个幻数13,4196608你就会得到一个错误.此外,程序执行功能void lol()并打印线How did we get here?.
我跑了nm ./main,发现我的函数void lol()的地址0000000000400900等于4196608(数字系统的基数是10).
这意味着程序由于某种原因"跳转"到该地址并执行该功能void lol().而且,如果我改变第一个数字,什么都不会发生.
main 10 4196608,main 11 4196608,main …