在 Sqlite3 中,SELECT
是否有可能所有行都有一个属性相等而另一个属性不相等?
SELECT count(*),title,katalogove_cislo FROM records GROUP BY katalogove_cislo ORDER BY count(*)
例如,此查询返回具有相等katalogove_cislo
的分组行。我想要排除那些具有相同列popis
的组。
所以
id,katalogove_cislo,popis
1,444,xxx
2,444,xxx
3,555,xx
4,555,xx
6,555,xy
将返回一个包含katalogove_cislo
- 555的组,因为组444具有相等的列popis
。
编辑:
我试着让它更清晰。
如果我按照katalogove_cislo进行分组,我会得到"群组"与katalogove_cislo相同。每个组可以包含多个具有相同katalogove_cislo的行。我想只获得那些组,其中至少有一行与该组中的其他行具有不同的标题。
id,katalogove_cislo,popis
1,444,xxx
2,444,xxx
3,555,xx
4,555,xx
6,555,xy
如果我在这张桌子上按katalogove_cislo分组,我得到444和555.但是,由于来自katalogove_cislo 444组的行具有相同的popis(xxx和xxx),我不想看到这个组。第二组与katalogove_cislo 555没有相同的标题 - xx == xx!= xy,所以我想要返回这个组。
答案 0 :(得分:1)
根据您更新的问题,这应该有效。这将消除SELECT
-- This returns the original values from the source table
tb.id,
tb.katalogove_cislo,
tb.popis
FROM
(
-- This will return only values in katalogove_cislo where
-- there are more than 1 distinct values in popis.
SELECT
katalogove_cislo,
COUNT(DISTINCT popis) AS popis_count
FROM
records
GROUP BY
katalogove_cislo,
HAVING
COUNT(DISTINCT popis) > 1
) ta
INNER JOIN
records tb
ON (ta.katalogove_cislo = tb.katalogove_cislo)
中只有一个不同值出现的记录。
id | katalogove_cislo | popis
-----------------------------
1 | 444 | xxx
2 | 444 | xxx
3 | 555 | xx
4 | 555 | xx
5 | 555 | xy
从这个数据集开始:
id | katalogove_cislo | popis
-----------------------------
3 | 555 | xx
4 | 555 | xx
5 | 555 | xy
查询应返回:
{{1}}
答案 1 :(得分:0)
您想要检查组的所有行,您需要应用以下逻辑:
SELECT
count(*) AS cnt,
katalogove_cislo
FROM
records
GROUP BY
katalogove_cislo
HAVING -- at least two different values
MIN(popis) <> MAX(popis)
ORDER BY
cnt