我对SQL比较陌生,我正试图找到解决此问题的最佳方法。
我正在尝试从2个表中获取数据并开始将它们合并在一起以对其进行分析,但我不知道在没有循环或许多嵌套子查询的情况下最好的方法。
到目前为止我做了什么: 我有2张桌子。表1包含用户信息,表2包含订单信息(价格和日期,以及用户)
我需要做什么: 我想为每个用户提供一行,其中包含有关所有订单的信息摘要。我希望找到每个用户的所有订单的价格总和,该用户支付的最高价格以及订单数量。我不确定如何在SQL中最好地操纵我的数据。
目前,我的代码如下:
Select alias1.*, Table2.order_id, Table2.price, Table2.order_date
From (Select * from Table1 where country='United States') as alias1
LEFT JOIN Table2
on alias1.user_id = Table2.user_id
按国家/地区过滤掉数据类型,然后将其与用户连接,创建包含用户信息的每个订单的记录。我不知道这是否是一个有用的步骤,但这是我第一次尝试使用数据的一部分。我在考虑循环这个,但我知道这违背了SQL的精神
编辑:这是我拥有的和我想要的一个例子:
表1(用户信息):
user_id user_country
1 United States
2 United Kingdom
(etc)
表2(订单信息):
order_id price user_id
100 5.00 1
101 3.50 2
102 2.50 1
103 1.00 1
104 8.00 2
我想要输出的内容:
user_id user_country total_price max_price number_of_orders
1 United States 8.50 5.00 3
2 United Kingdom 11.50 8.00 2
答案 0 :(得分:2)
这是实现此目的的一种方法:
SELECT alias1.user_id,
MAX(alias1.user_name) As user_name,
SUM(Table2.price) As UsersTotalPrice,
MAX(Table2.price) As UsersHighestPrice
FROM Table1 As alias1
LEFT JOIN Table2 ON alias1.user_id = Table2.user_id
WHERE country = 'United States'
GROUP BY user_id
如果您能给我们实际的表定义,那么我们可以向您展示一些实际的工作查询。
答案 1 :(得分:0)
这样的东西?在表2中聚集行,然后加入表1以获取所需的详细信息?
SELECT Table1.*,agg.thesum FROM
(SELECT UserID, SUM(aggregatedata) as thesum FROM Table2 GROUP BY UserID) agg
INNER JOIN Table1 on table1.userid = agg.userid
答案 2 :(得分:0)
这应该有效
select table1.*, t2.total_price, t2.max_price, t2.order_count
来自table1的join(selectt user_id,sum(table2.price)为total_price,max(table2.price)为max_price,count(order_id)为order_count,从table2为t2 group by t2.user_id) 在table1.user_id = t2.user_id上 其中t1.country ='untied_states'
答案 3 :(得分:0)
编辑:(删除:“不要使用显式连接”这是错误的,我的意思:) 尝试使用以下Sytax,以便更好地理解发生的事情:
第1步:
select
user.user_id, -- < you must tell the DB userid of which column
user_country,
price,
price
from -- now just the two tables:
Table1 as user, --table1 is a bad name, we use 'user'
Table2 as order
where user.user_id = order.user_id
所以你会得到类似的东西:
user_id user_country price price
1 alabama 5 5
2 nebrasca 1 1
2 alabama 7 7
1 alabama 7 7
2 alabama 3 7
依旧......
下一步是添加另一个where usercountry='alabama'
,以便'nebrasca'关闭
user_id user_country price price
1 alabama 5 5
2 alabama 7 7
1 alabama 7 7
2 alabama 3 7
现在你准备好了“聚合”:只需选择价格的MAX和SUM,但你必须告诉SQL引擎什么样的columes是'fixed'= group by
select
user.user_id, user_country, MAX(price), SUM(price)
from
Table1 as user,
Table2 as order
where user.user_id = order.user_id
and user_country='alabama'
group by user_id, user_country