Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:不同的行为取决于结果的位置_Mysql_Where - Fatal编程技术网

MySQL:不同的行为取决于结果的位置

MySQL:不同的行为取决于结果的位置,mysql,where,Mysql,Where,我正在修改一个现有的项目。我想将3个mysql请求分组在一个组中 这3个请求具有相同的选定数据,仅在其中更改。 下面是一个请求示例: SELECT COUNT(seg.my_seg1) FROM ( SELECT COUNT(DISTINCT cp.conference_id) as my_seg1 FROM A.Account a INNER JOIN A.ConferenceParticipant cp ON a.account_id = cp.user_id INNER JOIN A.Co

我正在修改一个现有的项目。我想将3个mysql请求分组在一个组中

这3个请求具有相同的选定数据,仅在其中更改。 下面是一个请求示例:

SELECT COUNT(seg.my_seg1) FROM (
SELECT COUNT(DISTINCT cp.conference_id) as my_seg1 FROM A.Account a
INNER JOIN A.ConferenceParticipant cp ON a.account_id = cp.user_id
INNER JOIN A.Conference cf ON cf.id = cp.conference_id
WHERE cf.`status` = 0
AND DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= cf.creation_timestamp
GROUP BY a.account_id) as seg
WHERE seg.my_seg1 >= 30

因此,我的问题是,如何根据同一请求中的WHERE结果获得3个不同的值?

像这样,您将有3个虚拟列:

SELECT 
    COUNT(IF(seg.my_seg1 >= 30, 1, 0)) AS res1,
    COUNT(IF(seg.my_seg1 >= 11 AND seg.my_seg1 < 30, 1, 0)) AS res2
FROM (
    SELECT COUNT(DISTINCT cp.conference_id) as my_seg1 
    FROM A.Account a
            JOIN A.ConferenceParticipant cp ON a.account_id = cp.user_id
            JOIN A.Conference cf ON cf.id = cp.conference_id
    WHERE 
        cf.`status` = 0
    AND DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= cf.creation_timestamp
    GROUP BY a.account_id
) AS seg

但是你必须修改你的过滤器,你说的是3个,但我只看到2个不同的。

这正是我需要的,谢谢。事实上,只有2个,复制/粘贴失败。还没试过,但看起来很完美。好吧,我编辑了。另外,我将上限改为<30,而不是原来的想法。再次感谢。
WHERE seg.my_seg1 >= 30;
SELECT 
    COUNT(IF(seg.my_seg1 >= 30, 1, 0)) AS res1,
    COUNT(IF(seg.my_seg1 >= 11 AND seg.my_seg1 < 30, 1, 0)) AS res2
FROM (
    SELECT COUNT(DISTINCT cp.conference_id) as my_seg1 
    FROM A.Account a
            JOIN A.ConferenceParticipant cp ON a.account_id = cp.user_id
            JOIN A.Conference cf ON cf.id = cp.conference_id
    WHERE 
        cf.`status` = 0
    AND DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= cf.creation_timestamp
    GROUP BY a.account_id
) AS seg