繁体   English   中英

在选择语句MySQL中对查询进行计数

[英]Count query within select statement MySQL

我在使用小型mysql查询时遇到了一个小问题。 我试图选择一些列,同时计算从表中得出的结果,并将计数结果添加为另一列。 所以说我有三个朋友

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

我想看到另一列说所有朋友=> 3

所以我想出了像这样的东西

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

现在那是行不通的。 所以我尝试将它们分组,但随后每行得到一个“ 1”。 所以只算那一行。 我的问题是:有没有一种方法可以对所有结果进行计数并将它们全部相加,从而得出我从表中检索到的所有结果的总和

我不是mysql专业人士,所以这令人厌烦,但同时也帮助我学到了很多东西。 这是我用自己的数据库制作的一个SQL示例,以演示该概念。 我希望这就是你想要的。

核心概念是为每个表/查询结果生成一个auto_increment列,然后左/右联接取决于哪个表具有更多行。 要在1个SQL中自动创建自动列,我所做的是通过以下方式初始化@cnt变量

(select @cnt := 0 AS rowNumber) as t0

但我从来没有用过那张桌子。 然后我做

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

下表中的增量列。

该方法的一个关键弱点是您必须知道哪个列/查询将返回最多的行并预定义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)

我认为这应该可行,因为您的问题有点令人困惑

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM