2015-06-14 61 views
0

我一直在试图弄清楚如何修改此查询,以便结果集不包含numHits。我想以相同的顺序得到相同的结果,只是没有包含numHits。按列排序但在结果中不包括该列

SELECT 
    `newel_inventoryKeywordIdDictionaryId`.`inventoryId` 
    ,COUNT(`newel_inventoryKeywordIdDictionaryId`.`inventoryId`) as numHits 
FROM 
    `newel_inventoryKeywordIdDictionaryId` 
    , `newel_inventoryDictionary` 
WHERE 
    `newel_inventoryKeywordIdDictionaryId`.`dicId` = `newel_inventoryDictionary`.`dicId` 
    AND ( 
     `newel_inventoryDictionary`.`word` = 'alabaster' OR `newel_inventoryDictionary`.`word` = 'chess' 
    ) 
GROUP BY inventoryId 
ORDER BY numHits DESC; 

样品的结果:

inventoryId, numHits 
6928, 2 
6929, 2 
6924, 2 
6925, 2 
13772, 2 
6926, 2 
18203, 1 
6931, 1 
13863, 1 
18402, 1 

期望的结果:

inventoryId 
6928 
6929 
6924 
6925 
13772 
6926 
18203 
6931 
13863 
18402 
+0

在你选中刚才设置'选择 newel_inventoryKeywordIdDictionaryId.inventoryId'没有'numHits' –

回答

1

移动从SELECT子句该柱ORDER BY子句:

SELECT 
    `newel_inventoryKeywordIdDictionaryId`.`inventoryId` 
FROM 
    `newel_inventoryKeywordIdDictionaryId` 
    , `newel_inventoryDictionary` 
WHERE 
    `newel_inventoryKeywordIdDictionaryId`.`dicId` = `newel_inventoryDictionary`.`dicId` 
    AND ( 
     `newel_inventoryDictionary`.`word` = 'alabaster' OR `newel_inventoryDictionary`.`word` = 'chess' 
    ) 
GROUP BY inventoryId 
ORDER BY COUNT(`newel_inventoryKeywordIdDictionaryId`.`inventoryId`) DESC; 
+0

谢谢。完美的感觉! – kambythet

0
SELECT 
`newel_inventoryKeywordIdDictionaryId`.`inventoryId` 
FROM 
`newel_inventoryKeywordIdDictionaryId` 
, `newel_inventoryDictionary` 
WHERE 
`newel_inventoryKeywordIdDictionaryId`.`dicId` = `newel_inventoryDictionary`.`dicId` 
AND ( 
    `newel_inventoryDictionary`.`word` = 'alabaster' OR `newel_inventoryDictionary`.`word` = 'chess' 
) 
GROUP BY inventoryId 
ORDER BY COUNT(`newel_inventoryKeywordIdDictionaryId`.`inventoryId`) DESC; 
+0

谢谢。我选择了Salman A的答案,因为它是在您之前提交的,但您的作品也是如此。 – kambythet

0

你只需要把聚合在ORDER BY。但是,您还应该:

  • 使用明确的join语法。 从不from子句中使用逗号。
  • 使用表别名。他们使查询更容易编写和阅读。
  • 使用in而不是一堆or语句。

下面是该查询的改进版本:

SELECT kdi.inventoryId 
FROM newel_inventoryKeywordIdDictionaryId kdi JOIN 
    newel_inventoryDictionary id 
    ON kdi.dicId = id.dictId 
WHERE id.word IN ('alabaster', 'chess') 
GROUP BY kdi.inventoryId 
ORDER BY COUNT(*) DESC;