mel*_*kes 4 sql postgresql query-performance
假设我们有以下表格meals:
| meal | stars | ----------------- | steak | 1 | | steak | 2 | | fish | 4 | | fish | 4 | | salad | 5 |
如何获得同一顿饭但不同星星的记录?我需要只有不同星星的记录.
上表的结果应如下:
| meal | stars | ----------------- | steak | 1 | | steak | 2 |
我尝试过以下查询:
SELECT DISTINCT t1.*
FROM meals t1
INNER JOIN meals t2 ON t1.meal = t2.meal
AND t1.stars <> t2.stars;
Run Code Online (Sandbox Code Playgroud)
但它耗费了太多时间和一些明显的内存.
我桌子的实际大小是:
SELECT pg_size_pretty(pg_relation_size('table_name'));
pg_size_pretty
----------------
2295 MB
所以我需要拿出别的东西,我正在寻求你的帮助!
SELECT a.*
FROM meals a
INNER JOIN
(
SELECT meal
FROM meals
GROUP BY meal
HAVING COUNT(DISTINCT stars) > 1
) b ON a.meal = b.meal
Run Code Online (Sandbox Code Playgroud)
OUTPUT
?????????????????
? MEAL ? STARS ?
?????????????????
? steak ? 1 ?
? steak ? 2 ?
?????????????????
Run Code Online (Sandbox Code Playgroud)