-1

我无法解决这个问题

我有 2 张桌子,我想为所有用户计算每个国家/地区的最高版本

例子:

John 来自美国,他有版本 1、2、3、4、5 和 6

Bob 来自法国,他有版本 1,2 和 3

玛丽也来自法国,她有版本 1,2 和 3

我想只计算它们中的最后一个版本

因为:

约翰有更高的版本 6 他不会被计入低于 6 的版本

Bob 有更高的版本 3,他不会被计入低于 3 的版本

Mary 有更高的版本 3 她不会被计入低于 3 的版本

所以最终结果将作为底部的 Desired 结果集

Table1

ID | USER  |  COUNTRY
---- ----- ----------
1  |  John |  USA
2  |  Bob  |  FRANCE
3  |  Mary |  FRANCE

Table2

ID |  USER  | VERSION
---- ------- ---------
1  |  John  |  1
2  |  Bob   |  1 
3  |  John  |  2 
4  |  Mary  |  1 
5  |  Mary  |  2 
6  |  John  |  3 
7  |  John  |  4 
8  |  Bob   |  2 
9  |  John  |  5 
10 |  Bob   |  3 
11 |  Mary  |  3 
12 |  John  |  6
Desired result set: 

Country | V1| V2 | V3 | V4 | V5 | V6 
-------- ---- --- ---- ---- ---- ----
USA     | 0 | 0  | 0  |  0 | 0  |  1 
FRANCE  | 0 | 0  | 2  |  0 | 0  |  0 

我做了一些没有运气的尝试

SELECT`Table1`.`Country` AS `C`,
    count(max( `Table2`.`Version` )) AS `V`
FROM
    ( `Table1` JOIN `Table2` ON ( ( `Table1`.`USER` = `Table2`.`USER` ) ) ) 
GROUP BY
    `Table1`.`COUNTRY`



OR SOMETHING LIKE THIS


SELECT
    `Table1`.`COUNTRY` AS `COUNTRY`,
    count(
    DISTINCT
    IF
        (
            (
                NOT (
                    `Table2`.`VERSION` IN (
                    SELECT
                        `Table2`.`VERSION` 
                    FROM
                        ( `Table1` JOIN `Table2` ON ( ( `Table1`.`USER` = `Table2`.`USER` ) ) ) 
                    WHERE
                        ( `Table2`.`VERSION` < 2 ) 
                    ) 
                ) 
            ),
            `Table2`.`ID`,
        NULL 
        ) 
    ) AS `V2`
FROM
    ( `Table1` JOIN `Table2` ON ( ( `Table1.`USER` = `Table2`.`USER` ) ) ) 
GROUP BY
    `Table1`.`COUNTRY`

请帮助我,谢谢

4

1 回答 1

0

我找到了解决方案,谢谢!

SELECT a.country
     , sum(b.version=1) as V1
     , sum(b.version=2) as V2
     , sum(b.version=3) as V3
     , sum(b.version=4) as V4
     , sum(b.version=5) as V5
     , sum(b.version=6) as V6
FROM table1 a
     JOIN (
            SELECT user
                 , MAX(version) as version
            FROM table2
            GROUP BY user
          ) b USING (user)
GROUP BY country
ORDER BY country DESC;
于 2021-10-03T19:14:59.267 回答