2016-05-17 69 views
2
SELECT COUNT(*) FROM a WHERE year = 2016 && month = 5 && date = 17 && user = 1 
//return 1 row 

SELECT COUNT(*) FROM a WHERE year = 2016 && month = 5 && date = 17 && user = 2 
//return 0 row 

我有2个问题,我需要检查用户1和用户2,用户1必须具有1行&用户2必须零行Mysql的合并2数查询在一个查询

我的问题是:这可能与两列合并这2个查询一起

收益为1行//return 1, 0

回答

4

可以使用sum()用条件来计算的条件有多少次是真的

SELECT SUM(user = 1) as u1, 
     SUM(user = 2) as u2 
FROM a 
WHERE year = 2016 and month = 5 and date = 17 
2

试试这个:

SELECT SUM(user = 1) AS user1, SUM(user = 2) AS user2 
FROM a 
WHERE year = 2016 AND month = 5 AND date = 17 

SELECT子句的第一个字段返回user = 1次出现次数,而第二个字段返回user = 2次出现次数。

3

是的,这就是所谓的有条件聚集:

SELECT count(CASE WHEN `user` = 1 THEN 1 END) as usr1_cnt, 
     count(CASE WHEN `user` = 2 THEN 1 END) as usr2_cnt 
FROM a 
WHERE year = 2016 and month = 5 and date = 17 
1

试试这个,

SELECT 
    (
    SELECT COUNT(*) 
    FROM a 
    WHERE year = 2016 && month = 5 && date = 17 && user = 1 
    ) AS usr1, 
    (
    SELECT COUNT(*) 
    FROM a 
    WHERE year = 2016 && month = 5 && date = 17 && user = 2 
    ) AS usr2 
+0

为什么从表中选择两次?这可以在一个选择中完成。 – sagi

0

您可以试试这个:

SELECT * from (
SELECT COUNT(*) count1 FROM a WHERE year = 2016 && month = 5 && date = 17 && user = 1) aa, 
(SELECT COUNT(*) count2 FROM a WHERE year = 2016 && month = 5 && date = 17 && user = 2) bb; 
+0

为什么要从表格中选择两次?这可以在一个选择中完成。 – sagi

+0

但是我想用两张桌子来做。 –

+0

这是一个不必要的计算! – sagi

1

你也可以试试这个:

SELECT SUM(user = 1) as user1, 
     SUM(user = 2) as user2 
FROM a 
WHERE year = 2016 and month = 5 and date = 17;