[英]Count query within select statement MySQL
我在使用小型mysql查询时遇到了一个小问题。 我试图选择一些列,同时计算从表中得出的结果,并将计数结果添加为另一列。 所以说我有三个朋友
我想看到另一列说所有朋友=> 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.