使用JOIN功能

时间:2011-08-18 04:44:18

标签: mysql sql join

我是MySQL的新手,我正在尝试了解有关JOIN功能的更多信息。

假设我有以下代码,我想找到每个级别的计数 变量然后加入两列。 所以数据看起来像:

in_clicks:
one
one
one
two 
three
four
four 
four 
four
four
five 
five
six
seven
seven
seven
eight

我正在尝试生成以下输出:

four    5
one     3
seven   3
five    2
two     1
three   1
six     1
eight   1

对JOIN函数一无所知,我可以使用类似于以下代码的东西来获得我想要的结果。 (它不起作用)

SELECT(SELECT * FROM in_clicks) AS keys,
     (SELECT COUNT(*) FROM in_clicks) AS KeysNum;

但是,如何使用JOIN函数优化我的sql代码?

1 个答案:

答案 0 :(得分:7)

你根本不需要加入。假设number是您列出的列:

SELECT number, COUNT(number)
FROM in_clicks
GROUP BY number
ORDER BY COUNT(number) DESC

COUNT()聚合函数基本上计算行数。 (COUNT(*)也会起作用。)这里的神奇之处是GROUP BY number,它指示数据库按number的不同值对结果进行分组。聚合函数将分别评估每个组。由于“四”组中有五行,因此该组上的COUNT()将产生5。

选择number列是可能的,因为我们已将其分组;没有GROUP BY number我们不能 * 选择number和聚合,因为这没有意义。选择此列可以查看相应聚合结果属于哪个组。

ORDER BY子句应该是不言自明的......按照该组中的行数对结果进行排序。注意,未指定计数相同的行的顺序;你可以ORDER BY COUNT(number) DESC, number ASC如果你想按顺序降序排序,然后number列升序......但请注意它将是文本比较,所以顺序是四,一,七,五,八,六,三,二。如果您只按计数订购,那么一/七和两/三/六/八行的相对顺序将不可靠,因为它们具有相同的计数。


* 实际上 可以在MySQL中选择未包含在GROUP BY中的非聚合列,但这是非标准的并且应该非常谨慎地使用。详细了解here