Mysql:选择一个表并限制每个列值的行结果

时间:2019-07-02 11:28:51

标签: mysql sql

我有一些自昨天以来一直在处理的MySQL查询,但我无法纠正。我也一直在通过Google和stackoverflow中的大量搜索进行搜索,但我仍然找不到可行的解决方案。

在我的问题中,我有一张表Users,其中有一列:id,姓名,性别,城市,公民身份。该表包含数千条记录。

表看起来像这样:

-------------------------------------------
| id | name | gender | city | citizenship |
-------------------------------------------
| 1 | alfred | m | new york | american    |
-------------------------------------------
| 2 | benny | f | london | british        |
-------------------------------------------
| 3 | george | m | brisbane | australian  |
-------------------------------------------
| 4 | itachi | m | tokyo | japanese       |
-------------------------------------------
| 5 | jenny | f | lauderdale | american   |
-------------------------------------------

等等...大约一千条记录..

现在我的问题是,我想查询基于特定条件的仅表(用户)。

例如,我要查询至少50位男性和50位女性,总共100条记录。

还需要一些用户,其中至少30个在纽约,另外30个在伦敦,另外40个在布里斯班。总共还是100条记录。

无论他们在哪个城市,也都需要某些用户具有公民身份,其中至少60位是美国人,20位英国人和20位澳大利亚人。

这是我尝试过的当前查询,带有子查询:

SELECT 
    *
FROM
    (
        SELECT gender as genderMale
        FROM users 
        WHERE gender = 'M'
        LIMIT 50
    ) AS myMale,

    (
        SELECT gender as genderFemale
        FROM users 
        WHERE gender = 'F'
        LIMIT 50
    ) AS myFemale,

    (
        SELECT city as cityNewYork
        FROM users 
        WHERE city = 'new york'
        LIMIT 30
    ) AS myCityNewYork,

    (
        SELECT city as cityLondon
        FROM users 
        WHERE city = 'london'
        LIMIT 30
    ) AS myLondon,

    (
        SELECT city as cityBrisbane
        FROM users 
        WHERE city = 'brisbane'
        LIMIT 40
    ) AS myBrisbane

以此类推,以此类推。等等。

结果也比我想要的要多。

有没有办法在MySQL中实现这一目标?

我们非常感谢您的帮助。

谢谢


更新:SQL小提琴

http://sqlfiddle.com/#!9/499874

0 个答案:

没有答案