根据标志选择最小值和最大值

mspsb9vt  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(441)

所以我有一张表“dump”:

  1. _____________________________________
  2. | id_seller | client | price | flag |
  3. |====================================|
  4. | 1 | a | 12 | True |
  5. | 1 | a | 10 | True |
  6. | 1 | a | 13 | True |
  7. | 1 | a | 14 | False |
  8. | 1 | a | 9 | False |
  9. | 1 | a | 11 | False |
  10. | 2 | a | 15 | True |
  11. | 2 | a | 13 | True |
  12. | 2 | a | 14 | True |
  13. | 2 | a | 21 | False |
  14. | 2 | a | 23 | False |
  15. | 1 | a | 20 | False |
  16. | 1 | b | 14 | True |
  17. [...]

我正试图获得一些客户和卖家的最低和最高价格,具体取决于以下标志:

  1. _________________________________________________________
  2. | min_price_flag0 | max_price_flag1 | client | id_seller |
  3. |========================================================|
  4. | 9 | 13 | a | 1 |
  5. | 20 | 15 | a | 2 |
  6. | 42 | 21 | b | 1 |
  7. | 84 | 10.5 | b | 2 |
  8. etc..

目前我正在使用此请求,但我不确定它的性能是否良好,也不确定它是否与聚合表中的其他select相关联:

  1. SELECT min_price_flag0,
  2. max_price_flag1,
  3. client,
  4. id_seller
  5. FROM (
  6. SELECT min(price) AS min_price_flag0,
  7. client,
  8. id_seller
  9. FROM dump_table
  10. WHERE id_seller IN (1,2,3) AND
  11. client IN ("a", "b", "c") AND
  12. flag = "False"
  13. GROUP BY client
  14. )
  15. AS min_price_flag0_select
  16. INNER JOIN
  17. (
  18. SELECT max(price) AS max_price_flag1,
  19. client,
  20. id_seller
  21. FROM dump_table
  22. WHERE id_seller IN (1,2,3) AND
  23. client IN ("a", "b", "c") AND
  24. flag = "True"
  25. GROUP BY client
  26. )
  27. AS max_price_flag1_select ON min_price_flag0_select.id_seller = max_price_flag1_select.id_seller AND
  28. min_price_flag0_select.client = max_price_flag1_select.client

我不太擅长sql,对数据库的访问也非常有限,所以我正在寻找更好的选择建议。

jrcvhitl

jrcvhitl1#

你想要条件加重吗( CASE WHEN 内部 MIN / /MAX ):

  1. SELECT
  2. MIN(CASE WHEN flag = 'False' THEN price END) AS min_price_flag0,
  3. MAX(CASE WHEN flag = 'True' THEN price END) AS max_price_flag1,
  4. client,
  5. id_seller
  6. FROM dump_table
  7. WHERE id_seller IN (1,2,3)
  8. AND client IN ('a', 'b', 'c')
  9. GROUP BY client, id_seller
  10. ORDER BY client, id_seller;

相关问题