我正在努力寻找通过SELECT查询合并数据的方法。该表如下:
sku condition make model derivative height length depth
-------------------------------------------------------------------------------------------
123 new ford test 212 1.28 9.0
234 new ford test 212
345 new ford test 212 4.9
456 new bmw awesome 3.33 3.33
789 new bmw cool 123 2.23 9.89
987 new bmw cool 123 1.99
... ... ... ... ... ... ...
我需要做的是按“最佳可用”数据进行分组。我试图按每列进行分组,但会发生意外结果。
这是我希望返回的内容:
sku condition make model derivative height length depth
-------------------------------------------------------------------------------------------
123 new ford test 212 1.28 9.0 4.9
234 new ford test 212 1.28 9.0 4.9
345 new ford test 212 1.28 9.0 4.9
456 new bmw awesome 3.33 3.33
789 new bmw cool 123 2.23 1.99 9.89
987 new bmw cool 123 2.23 1.99 9.89
... ... ... ... ... ... ...
从上面可以看出,SKU字段是唯一的,但所有其他数据都已根据其他行填充。条件基于条件,制造,模型,衍生物,但这些可能在将来发生变化。列名也会定期更改,因此它需要是动态的,而无需修改查询以添加新列。
如果存在具有相同Condition,Make,Model,Derivative但不同高度,长度或深度的行,则它应该保留该值。
很抱歉,如果我没有深入解释。
感谢任何帮助!
谢谢
答案 0 :(得分:0)
SELECT sku, condition, make, model, derivative,
IFNULL(t1.height, t2.height) height,
IFNULL(t1.length, t2.length) length,
IFNULL(t1.depth, t2.depth) depth
FROM mytable t1
JOIN (SELECT condition, make, model, derivative,
MAX(height) height, MAX(length) length, MAX(depth) depth
FROM mytable
GROUP BY condition, make, model, derivative) t2
USING (condition, make, model, derivative)
添加新列时,这不会自动更新。为此,您必须使用information_schema
表编写动态SQL以获取所有列名。现在您已经看到了查询的一般结构,我希望您可以自己解决这个问题。
答案 1 :(得分:0)
您需要不同的组合高度,深度,按组列的长度,rt?
那么,如果有两个不同的可用值可用于长度,但仅限于可用于高度和深度的值。你将如何处理这个问题。在这种情况下,以下查询将生成两个结果
SELECT M.SKU, M.Condition, M.Make, M.Model, M.Derivative, HGHT.HEIGHT, HGHT.LENGTH, HGHT.DEPTH
FROM
MY_TBL AS M
INNER JOIN
(
SELECT Condition, Make, Model, Derivative , MAX(height) AS HEIGHT, MAX(LENGTH) AS LENGTH, MAX(DEPTH) AS DEPTH
FROM MY_TBL
GROUP BY Condition, Make, Model, Derivative
) AS HGHT
ON M.CONDITION = HGHT.CONDITION
AND M.MAKE = HGHT.MAKE
AND M.MODEL = HGHT.MODEL
AND M.DERIVATIVE = HGHT.DERIVATIVE