【问题标题】:Selecting two counts on two joins in one query在一个查询中选择两个连接的两个计数
【发布时间】:2011-05-02 09:38:08
【问题描述】:
create table Autorzy(ID int, imie varchar, nazwisko varchar);
create table Wydawnictwa(ID int, nazwa varchar, adres varchar, tel varchar);
create table Ksiazki(ID int, ISBN bigint, wydawnictwo_id int, data date, ilosc int, tytul varchar);
create table KsiazkaAutor(ID int, autor_id int, ksiazka_id int);
create table Recenzje (id int, tresc varchar, autor_id int, ksiazka_id int);

我能做到:

select a.imie, a.nazwisko, count(ka.id) as IloscKsiazek
from autorzy a
left join KsiazkaAutor ka on a.id=ka.autor_id
group by a.imie, a.nazwisko;

从 KsiazkaAutor 中选择计数

select a.imie, a.nazwisko, count(r.id) as IloscRecenzji
from autorzy a
left join Recenzje r on a.id=r.autor_id
group by a.imie, a.nazwisko;

从 Recenzje 中选择计数。

如何在一个 SELECT 中同时获得两个计数?

编辑: 第一个选择:

"Bolesław";"普鲁斯";3
“亚当”;“科瓦尔斯基”;5
“斯蒂芬”;“国王”;3
“安德烈”;“萨普科夫斯基”;3
"瓦迪斯瓦夫";"雷蒙";3
“理查德”;“道金斯”;3
"Zofia";"Nałkowska";3
“亨利克”;“显凯维奇”;3
“特里”;“普拉切特”;3
“伊丽莎”;“奥热兹科瓦”;4
“亚当”;“密茨凯维奇”;2
"约翰 R.R.";"托尔金";5
"米科瓦伊";"科佩尼克";1
"Leń";"Śmierdzący";0
"一月";"诺瓦克";5
"卡米尔";"科瓦利克";0
"Ignacy";"Krasicki";3

第二次选择:

"Bolesław";"普鲁斯";0
"亚当";"科瓦尔斯基";0
“斯蒂芬”;“国王”;0
"安德烈";"萨普科夫斯基";0
"瓦迪斯瓦夫";"雷蒙";0
“理查德”;“道金斯”;0
"Zofia";"Nałkowska";0
“亨利克”;“显凯维奇”;1
“特里”;“普拉切特”;0
“伊丽莎”;“奥热兹科瓦”;2
"亚当";"密茨凯维奇";0
"约翰 R.R.";"托尔金";0
"米科瓦伊";"科佩尼克";0
"Leń";"Śmierdzący";0
"一月";"诺瓦克";0
"卡米尔";"科瓦利克";0
"Ignacy";"Krasicki";0

你的答案:

"Bolesław";"普鲁斯";3;0
“亚当”;“科瓦尔斯基”;5;0
“斯蒂芬”;“国王”;3;0
"安德烈";"萨普科夫斯基";3;0
"瓦迪斯瓦夫";"雷蒙";3;0
“理查德”;“道金斯”;3;0
"Zofia";"Nałkowska";3;0
"亨利克";"显凯维奇";3;3
“特里”;“普拉切特”;3;0
"伊丽莎";"奥热兹科瓦";8;8
"亚当";"密茨凯维奇";2;0
"约翰 R.R.";"托尔金";5;0
"米科瓦伊";"科佩尼克";1;0
"Leń";"Śmierdzący";0;0
"一月";"诺瓦克";5;0
"卡米尔";"科瓦利克";0;0
"Ignacy";"Krasicki";3;0

【问题讨论】:

    标签: select count postgresql


    【解决方案1】:

    是的,你可以这样做:

    select a.imie, a.nazwisko, 
    count(ka.id) as IloscKsiazek1,
    count(r.id) as IloscKsiazek2
    from autorzy a
    left join KsiazkaAutor ka on a.id=ka.autor_id
    left join Recenzje r on a.id=r.autor_id
    group by a.imie, a.nazwisko;
    

    您也可以在count 子句中尝试distinct 关键字:

    select a.imie, a.nazwisko, 
    count(distinct ka.id) as IloscKsiazek1,
    count(distinct r.id) as IloscKsiazek2
    from autorzy a
    left join KsiazkaAutor ka on a.id=ka.autor_id
    left join Recenzje r on a.id=r.autor_id
    group by a.imie, a.nazwisko;
    

    【讨论】:

    • @ksogor - 基于什么? postgre 不支持多连接?
    • 效果不好。当 count(r.id)>0 时返回 count(r.id) 等于 count(ka.id),否则返回 0。
    • @Miko:“效果不好”是什么意思?它不运行?它没有产生预期的结果?
    • @pablo - 从他上面的数据来看(参见对 OP 的编辑),MySQL 对计数中的空值有奇怪的反应?
    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多