对不起,我的英语不好。
SELECT
siparisler.siparis_tarihi, MAX(ADET), urunler.urun_ismi
FROM
SIPARISLER,
URUNLER,
MUSTERILER,
SIPARIS_DETAY
WHERE
SIPARISLER.SIPARISID = SIPARIS_DETAY.SIPARISID
AND URUNLER.URUN_ID = SIPARIS_DETAY.URUN_ID
AND MUSTERILER.MUSTERI_ID = SIPARISLER.MUSTERI_ID
GROUP BY
urunler.urun_ismi ,siparis_tarihi
ORDER BY
siparis_tarihi;
这是我的oracle SQL代码,这是结果
我怎么只显示这样的最大值:
每个日期我都可以显示最大的感谢行数
答案 0 :(得分:0)
尝试按max(adet)
降序排列结果,然后使用rownum = 1
从结果中选择第一行。
SELECT *
FROM (SELECT siparisler.siparis_tarihi,
max(adet),
urunler.urun_ismi
FROM siparis_detay
INNER JOIN siparisler
ON siparisler.siparisid = siparis_detay.siparisid
INNER JOIN urunler
ON urunler.urun_id = siparis_detay.urun_id
INNER JOIN musteriler
ON musteriler.musteri_id = siparisler.musteri_id
GROUP BY urunler.urun_ismi,
siparisler.siparis_tarihi
ORDER BY max(adet) DESC) x
WHERE rownum = 1;
您还应该使用显式联接语法以提高可读性。
编辑:
以上是对原始问题的解答。下面是评论。
尝试使用row_number()
将行号分配给按日期划分的每一行,最大行号为adet
,然后仅选择行号等于1的行。
SELECT y.siparis_tarihi,
y.adet,
y.urun_ismi
FROM (SELECT x.siparis_tarihi,
x.adet,
x.urun_ismi,
row_number() OVER (PARTITION BY x.siparis_tarihi
ORDER BY x.adet DESC) r
FROM (SELECT siparisler.siparis_tarihi,
max(adet) adet,
urunler.urun_ismi
FROM siparis_detay
INNER JOIN siparisler
ON siparisler.siparisid = siparis_detay.siparisid
INNER JOIN urunler
ON urunler.urun_id = siparis_detay.urun_id
INNER JOIN musteriler
ON musteriler.musteri_id = siparisler.musteri_id
GROUP BY urunler.urun_ismi,
siparisler.siparis_tarihi) x) y
WHERE y.r = 1;
每个日期仅显示一条记录。如果要显示平局显示日期中具有最大值的所有行,请将row_number()
替换为rank()
。
答案 1 :(得分:0)
在Oracle中,您可以使用keep
功能进行聚合。这正是您想要的:
SELECT s.siparis_tarihi, MAX(ADET),
MAX(u.urun_ismi) KEEP (DENSE_RANK FIRST ORDER BY ADET DESC)
FROM SIPARISLER s JOIN
URUNLER u
ON s.SIPARISID = u.SIPARISID JOIN
SIPARIS_DETAY sd
ON u.URUN_ID = sd.URUN_ID JOIN
MUSTERILER m
ON m.MUSTERI_ID = s.MUSTERI_ID
GROUP BY s.siparis_tarihi
ORDER BY s.siparis_tarihi;
注意:
JOIN
的语法。 从不在FROM
子句中使用逗号。