Edit2:选择分离查询并整理/处理数据库输出之外的整体信息。以.CSV格式取出它们,并将它们添加到Excel中,我将运行实际的数字。
查询1以提取订单和所需信息:
SELECT
shipstation_orders_v2.id AS SSO_id,
shipstation_orders_v2.order_number AS SSO_orderNumber,
shipstation_orders_v2.order_id AS SSO_orderID,
shipstation_orders_v2.storename AS SSO_storeName,
shipstation_orders_v2.order_date AS SSO_orderDate,
shipstation_orders_v2.order_total AS SSO_orderTotal,
shipstation_orders_v2.name AS SSO_name,
shipstation_orders_v2.company AS SSO_company
FROM shipstation_orders_v2
GROUP BY shipstation_orders_v2.id,
shipstation_orders_v2.order_number,
shipstation_orders_v2.order_id,
shipstation_orders_v2.storename,
shipstation_orders_v2.order_date,
shipstation_orders_v2.order_total,
shipstation_orders_v2.name,
shipstation_orders_v2.company
ORDER BY SSO_orderDate
查询2以提取履行和等效信息:
SELECT DISTINCT
shipstation_orders_v2.id AS SSO_id,
shipstation_fulfillments.id AS SSF_id,
shipstation_fulfillments.order_number AS SSF_orderNumber,
shipstation_orders_v2.order_number AS SSO_orderNumber,
shipstation_orders_v2.order_id AS SSO_orderID,
shipstation_orders_v2.storename AS SSO_storeName,
shipstation_orders_v2.order_date AS SSO_orderDate,
shipstation_fulfillments.order_date AS SSF_orderDate,
shipstation_orders_v2.order_total AS SSO_orderTotal,
shipstation_fulfillments.amount_paid AS SSF_amountPaid,
shipstation_orders_v2.name AS SSO_name,
shipstation_orders_v2.company AS SSO_company,
shipstation_fulfillments.name AS SSF_name,
shipstation_fulfillments.company AS SSF_company
FROM shipstation_fulfillments
INNER JOIN shipstation_orders_v2
ON shipstation_fulfillments.order_number =
shipstation_orders_v2.order_number
WHERE shipstation_fulfillments.order_number =
shipstation_orders_v2.order_number
GROUP BY shipstation_orders_v2.id,
shipstation_fulfillments.id,
shipstation_fulfillments.order_number,
shipstation_orders_v2.order_number,
shipstation_orders_v2.order_id,
shipstation_orders_v2.storename,
shipstation_orders_v2.order_date,
shipstation_fulfillments.order_date,
shipstation_orders_v2.order_total,
shipstation_fulfillments.amount_paid,
shipstation_orders_v2.name,
shipstation_orders_v2.company,
shipstation_fulfillments.name,
shipstation_fulfillments.company
编辑:标记为已回答的问题。我想出了另一种方法来做到这一点并不是那么难以理解。为了让我的大脑移动,使用DRapp的道具。
原始代码位于文本墙下方
我是一名自学成才的MySQL数据库用户。我不会说管理员,因为它只是我。我把一个小型数据库放在一起工作 - 大约60,000行,最多51列分布在三个表中。我在工作中使用它作为一种组织完全不同的销售数据设置的方法,并理解它以识别趋势,季节性,所有好东西。我主要使用Shipstation数据。
我的问题是当我需要引入第三个表时。显然,有两张桌子,它只是一个简单的JOIN
。我工作得很好。我在为第三张桌子正确设置JOINs
时遇到了一些麻烦。
我正在尝试JOIN
从两个最里面的查询到shipstation_orders_v2
和order_keys
的数据到我在第三个表中的shipstation_fulfillments
结果。
对于那些不使用Shipstation或者不熟悉这个元素的人来说,履行与订单属于不同的类别,并且不使用完全相同的数据。这是我将它们粘合在一起的肮脏方式,因此我们有一些关于销售和运输趋势等的可靠,可操作的信息。
我正在从shipstation_orders_v2
到order_keys
进行内部查询,作为SELECT DISTINCT
拆分订单总和的方法。在构建子查询之前,我遇到了数据重复问题。使用(现在)子查询和子子查询,已经消除了重复问题,只有这两个表它运行正常。
问题是,当我从SELECT
用shipstation_fulfillments
制作JOIN
到子查询和子子查询时,我遇到了障碍。
我在处理此查询时遇到了一些错误。按发生和解决顺序:
Error 2013
,在查询过程中丢失了与服务器的连接(告诉我我正在对三个连接的表进行全表读取,因为事先没有错误,但是我的rinkadink设置无法处理它)。我摆脱了那一个。
然后,错误1051为一个未识别的表名称shipstation_fulfillments
。对我来说,我认为这可能是查询别名的问题。我不确定。
最后,好Error 1064
,SELECT shipstation_fulfillments
参数后第一个子查询的语法不正确。
作为自学成才,我几乎可以保证我只是错过了某个地方的语法元素,这对于一个训练有素的MySQL用户来说显得相当明显。以下是我当前的查询设置。
如果需要任何澄清,请告诉我。
SELECT
`shipstation_fulfillments`.`order_date` AS `orderDate`,
`shipstation_fulfillments`.`order_number` AS `orderNumber`,
(`shipstation_fulfillments`.`amount_paid` + `shipstation_fulfillments`.`tax_paid`) AS "Total Paid",
`shipstation_fulfillments`.`name` AS `name`,
`shipstation_fulfillments`.`company` AS `company`,
FROM
(
(SELECT
COUNT(`shipstation_orders_v2`.`order_key`) AS `orderCount`,
`shipstation_orders_v2`.`key_id` AS `key_id`,
`shipstation_orders_v2`.`order_number` AS `order_number`,
MAX(`shipstation_orders_v2`.`order_date`) AS `order_date`,
`shipstation_orders_v2`.`storename` AS `store`,
(`shipstation_orders_v2`.`order_total` - `shipstation_orders_v2`.`shippingPaid`) AS `orderPrice`,
`shipstation_orders_v2`.`shippingpaid` AS `shippingPaid`,
SUM(`shipstation_orders_v2`.`shippingpaid`) AS `SUM shippingPaid`,
`shipstation_orders_v2`.`order_total` AS `orderTotal`,
SUM(`shipstation_orders_v2`.`order_total`) AS `SUM Total Amount Paid`,
`shipstation_orders_v2`.`qtyshipped` AS `qtyShipped`,
SUM(`shipstation_orders_v2`.`qtyshipped`) AS `SUM qtyShipped`,
`shipstation_orders_v2`.`name` AS `name`,
`shipstation_orders_v2`.`company` AS `company`
FROM
(SELECT DISTINCT
`order_keys`.`key_id` AS `key_id`,
`order_keys`.`order_key` AS `order_key`,
`shipstation_orders_v2`.`order_number` AS `order_number`,
`shipstation_orders_v2`.`order_id` AS `order_id`,
`shipstation_orders_v2`.`order_date` AS `order_date`,
`shipstation_orders_v2`.`storename` AS `storename`,
`shipstation_orders_v2`.`order_total` AS `order_total`,
`shipstation_orders_v2`.`qtyshipped` AS `qtyshipped`,
`shipstation_orders_v2`.`shippingpaid` AS `shippingpaid`,
`shipstation_orders_v2`.`name` AS `name`,
`shipstation_orders_v2`.`company` AS `company`
FROM
(`shipstation_orders_v2`
JOIN `order_keys` ON ((`order_keys`.`order_key` = `shipstation_orders_v2`.`order_id`)))) `t`)
JOIN `shipstation_fulfillments`
ON (`shipstation_orders_v2`.`order_number` = `shipstation_fulfillments`.`order_number`)) `w`
作为一对笔记...至于长表名称,没有问题,但你可以使用别名引用,例如我通过示例... ShipStation_Fulfillments SSF ...“SSF”现在是更短打字的别名但仍然有起源感。
通过“AS”更改查询中的列名时,您只需要像您的开头那样更改原始列名称结果,例如SSF.order_date AS orderDate,从最后一列中删除“_”名称,但也在“总付费”(但我讨论具有嵌入空格的列名,让用户界面处理标签的事情,但那只是我)。
当输入table.column(或alias.column)时,通过CamelCasing进行操作有助于提高阅读能力,稍微有点难以阅读大脑自然会为我们打破可读单词的地方。
基于查询的其他问题。外部查询部分无法识别内部封闭查询中的别名,只能识别子选择的别名,就像使用“t”和“w”别名一样。
接下来,在进行JOIN时,我的首选是以表格在查询中的方式读取它们,列出左边的第一个,以及右边加入TO的内容。 如果从表A加入到表B,则ON子句将为ON A.KeyID = B.KeyID vs B.KeyID = A.KeyID,尤其是如果要使用多个表... A-> B,B-> C ,C-> D.
任何带有聚合的查询(sum,avg,count,min,max等)都必须有一个“GROUP BY”子句来标识每个记录何时应该中断。在您的示例中,我将假设中断原始销售订单。
虽然此查询不起作用,但这里是查询的清理版本,显示了上面的实现。
SELECT
SSF.order_date AS OrderDate,
SSF.order_number AS OrderNumber,
(SSF.amount_paid + SSF.tax_paid) AS `Total Paid`,
SSF.name,
SSF.company
FROM
( SELECT
SSOv2.key_id,
SSOv2.order_number,
SSOv2.storename AS store,
SSOv2.order_total - SSOv2.shippingPaid AS OrderPrice,
SSOv2.ShippingPaid,
SSOv2.order_total AS OrderTotal,
SSOv2.QtyShipped,
SSOv2.name,
SSOv2.company,
COUNT(SSOv2.order_key) AS orderCount,
MAX(SSOv2.order_date) AS order_date,
SUM(SSOv2.shippingpaid) AS `SUM shippingPaid`,
SUM(SSOv2.order_total) AS `SUM Total Amount Paid`,
SUM(SSOv2.qtyshipped) AS `SUM qtyShipped`
FROM
( SELECT DISTINCT
OK.key_id AS key_id,
OK.order_key AS order_key,
SSOv2.order_number AS order_number,
SSOv2.order_id AS order_id,
SSOv2.order_date AS order_date,
SSOv2.storename AS storename,
SSOv2.order_total AS order_total,
SSOv2.qtyshipped AS qtyshipped,
SSOv2.shippingpaid AS shippingpaid,
SSOv2.name AS name,
SSOv2.company AS company
FROM
shipstation_orders_v2 SSOv2
JOIN order_keys
ON SSOv2.order_id = OK.order_key
JOIN shipstation_fulfillments SSF
ON SSOv2.order_number = SSF.order_number ) t
) w
接下来,我没有看到解决查询的实际数据或列出的结构,我会要求您编辑现有的帖子。创建一个列出表,列和示例数据的示例表,以便我们可以看到您正在聚合并尝试退出查询的基础。特别是显示每个订单和履行可能分别有多行的样本,以及您希望结果显示的样本答案。