mysql - 使用COUNT()作为JOIN查询的总​​AND WHERE

时间:2015-02-09 18:17:49

标签: mysql

我已经尝试了几个陈述,但似乎无法得到我需要的结果。这是我到目前为止所做的,但这会产生一个空表。

我需要计算word_id表格中wordnik_examplesJOIN内小于20的数量。

SELECT wordnik_examples.word_id,wordnik_word.word,count(wordnik_examples.word_id) as total
FROM `wordnik_examples`
JOIN `wordnik_word` ON wordnik_examples.word_id = wordnik_word.ID
WHERE (SELECT count(wordnik_examples.word_id) FROM `wordnik_examples`) < 20
GROUP BY wordnik_examples.word_id ORDER BY `total` DESC

我也试过

SELECT wordnik_examples.word_id,wordnik_word.word,count(wordnik_examples.word_id) as total
FROM `wordnik_examples`
JOIN `wordnik_word` ON wordnik_examples.word_id = wordnik_word.ID
WHERE total < 20
GROUP BY wordnik_examples.word_id ORDER BY `total` DESC

但是mysql回来时出现错误,指出total列未知。

我还尝试使用HAVING代替WHERE同时使用这两个查询,但这种方法也不起作用。

2 个答案:

答案 0 :(得分:1)

你的分组不够深刻。如果您有两个“常规”列后跟一个聚合,则按两个“常规”列分组。 MySQL很少让您只通过非聚合列的子集进行分组。

对于任何聚合的过滤,这里的意思是计数,您必须使用HAVING

SELECT
  wordnik_examples.word_id,
  wordnik_word.word,
  count(wordnik_examples.word_id) as total
FROM wordnik_examples
JOIN wordnik_word ON wordnik_examples.word_id = wordnik_word.ID
GROUP BY
  wordnik_examples.word_id,
  wordnik_word.word
HAVING count(wordnik_examples.word_id) < 20

答案 1 :(得分:0)

如果我理解正确你想要进行连接并计算wordnik_examples.word_id小于20的实例数。你将总数分配为一堆collumns,然后尝试检查数据。 试试这个 -

SELECT wordnik_examples.word_id,wordnik_word.word,count(wordnik_examples.word_id) 来自wordnik_examples 加入wordnik_word ON wordnik_examples.word_id = wordnik_word.ID WHERE wordnik_examples.word_id&lt; 20 GROUP BY wordnik_examples.word_id ORDER BY total DESC