对于我的项目,我有一个SQLite DB,如下所示:
https://sqliteonline.com/#fiddle-5aba37c986797mugjf9muddm
我正在尝试通过查询获取有关此内容的信息:
select
a.id_interno,
a.id_esterno,
count(b.id_ingrediente),
count(c.id_utente)
from
lista_spesa a
left join elemento_lista_spesa b on b.id_lista_spesa = a.id_interno
left join utente_lista_spesa c on c.id_lista_spesa = a.id_interno
group by
b.id_lista_spesa, c.id_lista_spesa;
但我获得了计数
ID_INTERNO|ID_ESTERNO|count(b.id_ingrediente)|count(c.id_utente)
1|-1|2|2
但我希望得到以下结果:
ID_INTERNO|ID_ESTERNO|count(b.id_ingrediente)|count(c.id_utente)
1|-1|1|2
为什么我有这个错误的结果?我该如何解决?
谢谢!
答案 0 :(得分:0)
因为您要将表连接在一起,所以您有重复的值。尝试在计数函数中添加一个独特的:
select a.id_interno,
a.id_esterno,
count(DISTINCT b.id_ingrediente),
count(DISTINCT c.id_utente)
from lista_spesa a
left join elemento_lista_spesa b
on b.id_lista_spesa = a.id_interno
left join utente_lista_spesa c
on c.id_lista_spesa = a.id_interno
group by b.id_lista_spesa, c.id_lista_spesa;
答案 1 :(得分:0)
也许你想要这样的东西:
select a.id_interno, a.id_esterno, (select count(id_ingrediente) from elemento_lista_spesa) as cuentab, (select count(id_utente) from utente_lista_spesa) as cuentac
from lista_spesa a left join elemento_lista_spesa b on b.id_lista_spesa = a.id_interno
left join utente_lista_spesa c on c.id_lista_spesa = a.id_interno
group by b.id_lista_spesa, c.id_lista_spesa;
结果是:
1, -1, 1, 2
答案 2 :(得分:0)
在您的情况下,您不需要为此查询使用Group by。只需在DISTINCT
函数
count()
即可
选项1
SELECT
lista_spesa.id_interno,
lista_spesa.id_esterno,
count(DISTINCT elemento_lista_spesa.id_ingrediente),
count(DISTINCT utente_lista_spesa.id_utente)
FROM
lista_spesa
left join elemento_lista_spesa on elemento_lista_spesa.id_lista_spesa = lista_spesa.id_interno
left join utente_lista_spesa on utente_lista_spesa.id_lista_spesa = lista_spesa.id_interno
选项2
SELECT
lista_spesa.id_interno,
lista_spesa.id_esterno,
(SELECT count(elemento_lista_spesa.id_ingrediente) FROM elemento_lista_spesa WHERE elemento_lista_spesa.id_lista_spesa = lista_spesa.id_interno) AS COUNT1,
(SELECT count(utente_lista_spesa.id_utente) FROM utente_lista_spesa WHERE utente_lista_spesa.id_lista_spesa = lista_spesa.id_interno) AS COUNT2
FROM
lista_spesa