有两个问题。首先,您不能按列中不出现的列进行排序。其次,你必须创建一个临时表,而不是在为后来这样的事情应该工作:
SELECT objectattributelink.ID, COUNT(*) Attributes
FROM objectattributelink, attributelist, TABLE (VALUES ('Solid', 1), ('Metal', 2), ('Red', 3), ('AB', 4), ('Blue', 5), ('Liquid', 6), ('Plastic', 7)) AS descs(AttributeDesc, AttributeNo)
WHERE objectattributelink.ID = attributelist.AttributeID
AND attributelist.AttributeDesc = descs.AttributeDesc
AND objectattributelink.AttributeID IN ('".implode("', '", $myArray)."')
GROUP BY objectattributelink.ID
ORDER BY Attributes DESC, descs.AttributeNo
然而,这仍然是无效的,因为descs.AttributeNo
列不是组由。另外我不知道比DB2之外的任何数据库支持此...
所以修复组的问题,你就必须通过改变您的组:
GROUP BY objectattributelink.ID, descs.AttributeNo
这应该不会改变分组本身,因为ID意味着attributeno。
而且,我不知道,但你可能还必须通过改变您的订单:
ORDER BY 2 DESC, descs.AttributeNo
所以最终的查询应该是这样的:
SELECT objectattributelink.ID, COUNT(*) Attributes
FROM objectattributelink, attributelist, TABLE (VALUES ('Solid', 1), ('Metal', 2), ('Red', 3), ('AB', 4), ('Blue', 5), ('Liquid', 6), ('Plastic', 7)) AS descs(AttributeDesc, AttributeNo)
WHERE objectattributelink.ID = attributelist.AttributeID
AND attributelist.AttributeDesc = descs.AttributeDesc
AND objectattributelink.AttributeID IN ('".implode("', '", $myArray)."')
GROUP BY objectattributelink.ID
ORDER BY 2 DESC, descs.AttributeNo
最后,也可以使用row_number来不必明确地输入数字:
SELECT objectattributelink.ID, COUNT(*) Attributes
FROM objectattributelink, attributelist,
(SELECT AttributeDesc, row_number() over() AS AttributeNo FROM VALUES (('Solid'), ('Metal'), ('Red'), ('AB'), ('Blue'), ('Liquid'), ('Plastic')) AS (AttributeDesc)) AS descs
WHERE objectattributelink.ID = attributelist.AttributeID
AND attributelist.AttributeDesc = descs.AttributeDesc
AND objectattributelink.AttributeID IN ('".implode("', '", $myArray)."')
GROUP BY objectattributelink.ID
ORDER BY 2 DESC, descs.AttributeNo
你使用了哪个数据库? –
感谢戈登对我的另一个问题的回答,工作完美。我基本上在这里做同样的事情,但希望这个SQL查询返回两个级别的排序。我实际上使用你建议我进行属性排序的查询。 [链接] http://stackoverflow.com/questions/18244765/order-grouped-values-by-custom-rank-sql [7链接](我正在使用这个简化版本的查询这个问题。但现在选择一个ID的自定义数组) – Mazka
你知道这个评论是不适用于任何不是@Mazka的人,对吧? :)你可能会链接到你以前的相关问题吗? - inflagranti 12分钟前 –