在select语句MySQL中计数查询

时间:2014-05-09 07:28:04

标签: mysql select count

我对一个小的mysql查询有一个小问题。我试图选择几个列,同时计算表中的内容,并将计数结果添加为另一列。所以,让我说我有三个朋友

  • 朋友1
  • 朋友2
  • 朋友3

我想看到另一栏说allfriends => 3

所以我想出了一些看起来像这样的东西

SELECT friends.friend, users.avatar, COUNT(*) AS allfriends FROM users,friends

现在有什么不起作用的。所以我试着把它们分组,但后来我得到了一个' 1'对于每一行。所以只计算个别行。我的问题是:有没有办法计算所有结果并将它们全部加在一起,以便给我一些我从表中检索到的内容

2 个答案:

答案 0 :(得分:1)

我不是一个mysql专业人员,所以这很费劲,但帮助我在​​这个过程中学到了很多东西。 这是一个sql示例,我用自己的数据库来制作这个概念。 我希望这就是你想要的。

核心概念是为每个表/查询结果生成一个auto_increment列,然后左/右连接取决于哪个表有更多行。 在1 SQL中创建一个自动增量列是繁琐的,我所做的是通过

启动@cnt变量
(select @cnt := 0 AS rowNumber) as t0

但我从未使用过那张桌子。然后我做

select (@cnt := @cnt + 1) AS rowNumber, ....

在下表中列出了incrmental列。

该方法有一个关键的弱点,您必须知道哪个列/查询将返回最多行并预定义SQL中JOIN的类型。我不确定这对你有什么帮助,但是我想分享它。

mysql> select t1.rowNumber,t1.friend, t2.rowNumber,t2.avatar from (select @cnt := 0 AS rowNumber) as t0 RIGHT JOIN (select (@cnt := @cnt + 1) AS rowNumber,friend from friends) as t1 using (rowNumber) LEFT JOIN (select @cnt := 0 AS rowNumber) as t4 using (rowNumber) RIGHT JOIN (select (@cnt := @cnt + 1) AS rowNumber,avatar from user) as t2 using (rowNumber);
+-----------+-------------+-----------+------------+
| rowNumber |    friend   | rowNumber |   avatar   |
+-----------+-------------+-----------+------------+
|         1 |        0001 |         1 |       0001 |
|         2 |        0002 |         2 |       0002 |
|         3 |        0003 |         3 |       0003 |
|         4 |        0004 |         4 |       0004 |
|         5 |        0005 |         5 |       0005 |
|         6 |        0006 |         6 |       0006 |
|         7 |        0007 |         7 |       0007 |
|         8 |        0008 |         8 |       0008 |
|         9 |        0009 |         9 |       0009 |
|        10 |        0010 |        10 |       0010 |
|      NULL |        NULL |        11 |       0011 |
|      NULL |        NULL |        12 |       0012 |
|      NULL |        NULL |        13 |       0013 |
|      NULL |        NULL |        14 |       0014 |
|      NULL |        NULL |        15 |       0015 |
|      NULL |        NULL |        16 |       0016 |
|      NULL |        NULL |        17 |       0017 |
|      NULL |        NULL |        18 |       0018 |
|      NULL |        NULL |        19 |       0019 |
|      NULL |        NULL |        20 |       0020 |
+-----------+-------------+-----------+------------+
20 rows in set (0.00 sec)

答案 1 :(得分:0)

我觉得这应该有效,因为你的问题很容易让人感到困惑

SELECT friends.friend,users.avatar,xyz。* FROM users,friends,(SELECT COUNT(*)AS allfriends FROM users,friends)xyz