我是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代码?
答案 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 。