【问题标题】:two select queries with different where clause on same table在同一张表上具有不同 where 子句的两个选择查询
【发布时间】:2014-12-01 12:07:59
【问题描述】:

我有一个表追随者和追随者..

想在一个存储过程中获取两者的计数。是否可以在同一张表上使用不同 where 条件的两个选择查询?

CREATE TABLE Table1
    ([val1] int, [val2] int, [val3] int, [val4] int, other int)
;

INSERT INTO Table1
    ([val1], [val2], [val3], [val4], other)
VALUES
    (1, 26, 13, 1, 1),
    (2, 13, 26, 1, 1),
(3, 10, 26, 1, 1),
(4, 26, 13, 1, 1),
(5, 14, 26, 1, 1)
;

我的选择查询

(select count(*) as following_count from table1 where val2=26)

(select count(*) as follower_count from table1 where val3=26)

SQL FIDDLE LINK

【问题讨论】:

    标签: mysql sql sql-server stored-procedures


    【解决方案1】:

    你可以这样做:

    SELECT
        SUM(CASE WHEN val2=26 THEN 1 ELSE 0 END) AS following_count,
        SUM(CASE WHEN val3=26 THEN 1 ELSE 0 END) AS follower_count
    FROM
        table1
    

    【讨论】:

      【解决方案2】:

      为什么不使用 UNION ALL 触发这两个语句?

      见:http://dev.mysql.com/doc/refman/5.1/de/union.html

      所以:

      SELECT COUNT(*) AS following_count FROM table1 WHERE val2=26
      UNION ALL
      SELECT COUNT(*) AS following_count FROM table1 WHERE val3=26
      

      在 1 个查询中返回两行,包含 2 个数字。

      在两列中这样做:

      SELECT
        (SELECT COUNT(*) AS following_count FROM table1 WHERE val2=26) col1
        , (SELECT COUNT(*) AS following_count FROM table1 WHERE val3=26) col2
      

      【讨论】:

      • 不想要两行..我想要两列。
      • 编辑我的帖子,如果你想要两列
      • 谢谢,但执行时间有点长..与其他答案相比。
      • 好吧,我不知道你的数据库,所以它可能需要比 Arions 解决方案更长的时间。您可以尝试在 val2 和 val3 中设置索引,但如果其他解决方案仍然适合您,那您就可以了 :)
      【解决方案3】:

      只需在语句中添加分号...

      (select count(*) as following_count from table1 where val2=26);
      
      (select count(*) as follower_count from table1 where val3=26);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-08
        • 1970-01-01
        • 1970-01-01
        • 2020-08-18
        • 1970-01-01
        • 2014-09-29
        • 1970-01-01
        • 2012-07-02
        相关资源
        最近更新 更多