【问题标题】:Mysql Counting rowsMysql 计算行数
【发布时间】:2014-11-19 08:58:17
【问题描述】:

我有一张桌子msg
根据我的 SQL 查询,我需要选择 COUNT 到所有 msg 对应的用户。 第一季度->

SELECT COUNT(*) 
FROM msg 
WHERE to = 2 
AND from IN(1,3,4) 
GROUP BY to

Q2->

SELECT COUNT(*) 
FROM msg 
WHERE `from` = 2 
AND `to` IN (1,3,4) 
GROUP BY from

我怎样才能在 1 Query 中做到这一点? (我的 user_id = 2)

msg_id|from|to|msg|
1       2    3 Hi
2       2    3 Hi
3       2    4 Hi
4       3    2 Hi
5       3    4 Hi
6       4    2 Hi
7       3    2 HiBye
8       1    2 Hi
9       2    4 Hi
10      3    2 Hi

预期输出:

user_id|sent_c|got_c|
3        2        3 
4        2        1 
1        0        1

【问题讨论】:

  • 抱歉编辑问题@Strawberry
  • 是的@Strawberry 错字

标签: mysql sql select count


【解决方案1】:

可能有几种方法可以给这只猫剥皮。这是一个...

  DROP TABLE IF EXISTS my_table;

  CREATE TABLE my_table
  (msg_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
  ,msg_from INT NOT NULL
  ,msg_to INT NOT NULL
  ,msg VARCHAR(12) NOT NULL
  );

  INSERT INTO my_table VALUES
  (1       ,2    ,3 ,'Hi'),
  (2       ,2    ,3 ,'Hi'),
  (3       ,2    ,4 ,'Hi'),
  (4       ,3    ,2 ,'Hi'),
  (5       ,3    ,4 ,'Hi'),
  (6       ,4    ,2 ,'Hi'),
  (7       ,3    ,2 ,'HiBye'),
  (8       ,1    ,2 ,'Hi'),
  (9       ,2    ,4 ,'Hi'),
  (10      ,3    ,2 ,'Hi');

  SELECT * FROM my_table;
  +--------+----------+--------+-------+
  | msg_id | msg_from | msg_to | msg   |
  +--------+----------+--------+-------+
  |      1 |        2 |      3 | Hi    |
  |      2 |        2 |      3 | Hi    |
  |      3 |        2 |      4 | Hi    |
  |      4 |        3 |      2 | Hi    |
  |      5 |        3 |      4 | Hi    |
  |      6 |        4 |      2 | Hi    |
  |      7 |        3 |      2 | HiBye |
  |      8 |        1 |      2 | Hi    |
  |      9 |        2 |      4 | Hi    |
  |     10 |        3 |      2 | Hi    |
  +--------+----------+--------+-------+
  10 rows in set (0.00 sec)

  SELECT user_id
       , SUM(status = 'sent') s
       , SUM(status = 'received') r
    FROM
       (  SELECT  msg_id,msg_to user_id,'sent' status FROM my_table WHERE msg_from = 2
          UNION
          SELECT  msg_id,msg_from,'received' FROM my_table WHERE msg_to = 2
       ) x
   WHERE user_id IN(1,3,4)
   GROUP
      BY user_id;

 +---------+------+------+
 | user_id | s    | r    |
 +---------+------+------+
 |       1 |    0 |    1 |
 |       3 |    2 |    3 |
 |       4 |    2 |    1 |
 +---------+------+------+          

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    相关资源
    最近更新 更多