使用JOIN功能

ATM*_*hew 2 mysql sql join

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

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

in_clicks:
one
one
one
two 
three
four
four 
four 
four
four
five 
five
six
seven
seven
seven
eight
Run Code Online (Sandbox Code Playgroud)

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

four    5
one     3
seven   3
five    2
two     1
three   1
six     1
eight   1
Run Code Online (Sandbox Code Playgroud)

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

SELECT(SELECT * FROM in_clicks) AS keys,
     (SELECT COUNT(*) FROM in_clicks) AS KeysNum;
Run Code Online (Sandbox Code Playgroud)

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

cdh*_*wie 7

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

SELECT number, COUNT(number)
FROM in_clicks
GROUP BY number
ORDER BY COUNT(number) DESC
Run Code Online (Sandbox Code Playgroud)

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非聚集列,但是这是不规范的,应极为谨慎使用.在这里阅读更多相关信息.