【问题标题】:How to get rows from same table with different conditions如何从具有不同条件的同一张表中获取行
【发布时间】:2020-02-26 13:01:20
【问题描述】:

我想从具有不同条件的同一张表中获取数据。我在 android studio 中使用 sqlite。

**ID    Name       Role**
1   Emma       Manager
2   Olivia     Manager
3   Ava        Manager
4   Isabella   Sales officer
5   Sophia     Sales Officer
6   Charlotte  Sales Officer
7   Mia        Clerk
8   Amelia     Clerk

假设这张表,我有不同类型的角色和不同数量的角色。我想从每个角色中选择 2 个人。

Select * from employeeTable where role = 'Manager' LIMIT 2
Select * from employeeTable where role = 'Sales officer' LIMIT 2
Select * from employeeTable where role = 'Clerk' LIMIT 2

我只是想加入这三个查询的结果。 对不起,如果这个幼稚的问题。并提前感谢

【问题讨论】:

标签: android sqlite


【解决方案1】:

带有row_number()窗口功能:

select t.id, t.name, t.role 
from (
  select *, row_number() over (partition by role) rn
  from employeeTable
) t
where t.rn <= 2

你也可以定义:

partition by role order by name

或:

partition by role order by id

而不仅仅是:

partition by role

获取结果中的特定行。
请参阅demo
结果:

| ID  | Name     | Role          |
| --- | -------- | ------------- |
| 7   | Mia      | Clerk         |
| 8   | Amelia   | Clerk         |
| 1   | Emma     | Manager       |
| 2   | Olivia   | Manager       |
| 4   | Isabella | Sales Officer |
| 5   | Sophia   | Sales Officer |

【讨论】:

  • 这真是太棒了!它解决了我的问题。现在有一个小问题。此查询获取静态数据,即始终从每个类别中选择前 2 个。如果我想从每个角色/类别中选择随机/动态数据怎么办?我的意思是说,每次我运行查询时它都不应该得到前两个。但它应该选择 1st,3rd 或 2nd,3rd 或 1st,2nd
  • 您可以将 WHERE 子句更改为:where t.rn in (1, 3) 获得 1st 和 3d 或 where t.rn between 2 and 4 获得 2nd、3d 和 4th。
【解决方案2】:

尝试查询并检查是否有效:

Select * from employeeTable where role = 'Manager' LIMIT 2
UNION ALL
Select * from employeeTable where role = 'Sales officer' LIMIT 2
UNION ALL
Select * from employeeTable where role = 'Clerk' LIMIT 2

【讨论】:

  • 在 union all 之前不能使用 limit..这个查询不起作用...
  • select * from ( select * from employeeTable where role = 'Manager' LIMIT 2 ) UNION ALL ( select * from ... = 'Sales Officer' LIMIT 2 ) UNION ALL ( select * ... 'Clerk' LIMIT 2 ) ; 会起作用。
猜你喜欢
  • 2014-12-11
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
相关资源
最近更新 更多