需要帮助为特定条件的多个选择创建mysql查询吗

需要帮助为特定条件的多个选择创建mysql查询吗,mysql,sql,Mysql,Sql,我需要一些帮助来进行SQL查询。 我有“股票交易所”表,它记录了四个不同商店/站点之间交换的股票。 它记录 日期、项目标识、数量、价格、总价、从现场到现场 现在我需要创建一个查询来运行其中一个商店/站点,该查询将返回在其他三个商店之间发送和接收的股票的总价。 例如:有Store1、Store2、Store3、Store4 如果我需要检查Store1,它应该返回: 门店名称\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


我需要一些帮助来进行SQL查询。
我有“股票交易所”表,它记录了四个不同商店/站点之间交换的股票。
它记录

日期、项目标识、数量、价格、总价、从现场到现场

现在我需要创建一个查询来运行其中一个商店/站点,该查询将返回在其他三个商店之间发送和接收的股票的总价。

例如:有Store1、Store2、Store3、Store4
如果我需要检查Store1,它应该返回:

门店名称\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu50
门店3\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 店面4\uuuuuuuuu400\uuuuuuuu200

我自己试过了,但只能得到发送或接收的股票总数

这是你的电话号码

编辑:
我现在将表更改为记录存储id(1,2,3,4…),而不是存储别名(crw、chc、cal_rav…),并且我接受的代码(作为应答)已停止工作。我在代码中尝试了此修改以按存储id查找匹配行,但未返回任何内容:

SELECT GREATEST(t2.name, t3.name) AS from_store,
       LEAST(t2.name, t3.name) AS to_store,
       SUM(CASE WHEN t2.name < t3.name THEN t1.total_price ELSE 0 END) AS total_sent,
       SUM(CASE WHEN t2.name > t3.name THEN t1.total_price ELSE 0 END) AS total_received
FROM stock_exchange t1
INNER JOIN sites t2
    ON t1.from_site = t2.id
INNER JOIN sites t3
    ON t1.to_site = t3.id
GROUP BY GREATEST(t2.name, t3.name),
         LEAST(t2.name, t3.name)
HAVING MAX(GREATEST(t2.id, t3.id)) = '1'  
从存储中选择最大值(t2.name,t3.name),
至少(t2.名称,t3.名称)关于门店,
作为发送的总金额的总和(当t2.namet3.name,然后t1.total\u price,否则0结束时的情况)作为收到的总金额
来自证券交易所t1
内部连接站点t2
在t1.from_site=t2.id上
内部连接站点t3
在t1.to_站点上=t3.id
按最大值分组(t2.name,t3.name),
最少(t2.name,t3.name)
最大值(最大值(t2.id,t3.id))=“1”
这是你的电话号码


在我看来,虽然有可能有更广泛的多个存储组合,但我更喜欢使用更简单(通常执行速度更快)的查询:

结果:

。。。所以我会在生产中使用之前,针对更大的数据量对其进行测试并比较解决方案

计算总数时:

SELECT *, (SELECT SUM(total_price)
                  FROM stock_exchange se 
                  WHERE se.from_site = sites.alias 
                  GROUP BY se.from_site) 
                as total_sent_sum,
                (SELECT SUM(total_price)
                  FROM stock_exchange se 
                  WHERE se.to_site = sites.alias 
                  GROUP BY se.to_site) 
                as total_received_sum
                FROM sites;

这里有一个查询,显示从Cafe Rosewood到所有其他商店的发送和接收金额:

SELECT GREATEST(t2.name, t3.name) AS from_store,
       LEAST(t2.name, t3.name) AS to_store,
       SUM(CASE WHEN t2.name < t3.name THEN t1.total_price ELSE 0 END) AS total_sent,
       SUM(CASE WHEN t2.name > t3.name THEN t1.total_price ELSE 0 END) AS total_received
FROM stock_exchange t1
INNER JOIN sites t2
    ON t1.from_site = t2.alias
INNER JOIN sites t3
    ON t1.to_site = t3.alias
GROUP BY GREATEST(t2.name, t3.name),
         LEAST(t2.name, t3.name)
HAVING MAX(GREATEST(t2.name, t3.name)) = 'Cafe Rosewood'
从存储中选择最大值(t2.name,t3.name),
至少(t2.名称,t3.名称)关于门店,
作为发送的总金额的总和(当t2.namet3.name,然后t1.total\u price,否则0结束时的情况)作为收到的总金额
来自证券交易所t1
内部连接站点t2
在t1.from_site=t2.alias上
内部连接站点t3
在t1.to_站点上=t3.alias
按最大值分组(t2.name,t3.name),
最少(t2.name,t3.name)
拥有MAX(最大的(t2.name,t3.name))='Cafe Rosewood'
如果要查看所有存储之间的事务,只需删除
HAVING
子句。此查询采用了一种技巧,即使用
grest(from\u site,to\u site)
将两个门店分组


这背后的逻辑是什么,在你的提琴中没有值Shop1,Shop2,…没有Shop1,Shop2…,我提到了store1,store2…,举个例子,可以在提琴中找到实际的店名。如果你在这里显示的结果取决于提琴中的数据,那就好了,表stock exchange正在记录存储别名,该别名在结果中通过内部联接stores表来查找实际的存储名称。要理解它,一切都在掌握之中。我不想再说一遍,把问题弄得很复杂。此表中没有价值存储2:(1,‘红木咖啡馆’、‘crw’、(2,‘山坡咖啡馆’、‘chc’)、(6,‘瑞夫咖啡馆’、‘卡鲁拉夫’、(8,‘达能咖啡馆’、‘卡鲁dng’);由于这是返回每个商店的发送和接收总数,请您提供一个查询以获取:红木咖啡厅发送到其他商店和从其他商店接收到的数量(相对)?@sohal07 Tim已经回答了您的附加问题:)谢谢您快速回答,但如果您阅读了该问题,示例中询问了相同的场景“现在我需要创建一个查询来运行其中一个将返回的商店/站点……”。请不要介意,我完全尊重你和你花时间帮助我的人,不管怎样,我更新了我的答案。如果您对其他解决方案持开放态度,请尝试一下。谢谢tim,您是否可以加入“站点”表,以获取门店的实际名称而不是别名Hi tim,我刚刚将门店别名从varchar更新为int,现在无法根据以前基于门店名称的站点id获取结果(Cafe Rosewood)。。。。。
SELECT GREATEST(t2.name, t3.name) AS from_store,
       LEAST(t2.name, t3.name) AS to_store,
       SUM(CASE WHEN t2.name < t3.name THEN t1.total_price ELSE 0 END) AS total_sent,
       SUM(CASE WHEN t2.name > t3.name THEN t1.total_price ELSE 0 END) AS total_received
FROM stock_exchange t1
INNER JOIN sites t2
    ON t1.from_site = t2.alias
INNER JOIN sites t3
    ON t1.to_site = t3.alias
GROUP BY GREATEST(t2.name, t3.name),
         LEAST(t2.name, t3.name)
HAVING MAX(GREATEST(t2.name, t3.name)) = 'Cafe Rosewood'