今回も備忘録としてあげますが、表題の通りにしたいが以下の様にすると、連番を含めてselect distinctするため、期待通りに動いてくれません。
SELECT prop_dsc1, row_number() OVER (PARTITION BY prop_dsc1 ORDER BY prop_dsc1) venodr_no FROM art_prop WHERE prop_name="vendor"; +-----------+-----------+ | prop_dsc1 | venodr_no | +-----------+-----------+ | ASRock | 1 | | ASRock | 2 | | ASRock | 3 | | ASRock | 4 | | ASRock | 5 | | MSI | 1 | +-----------+-----------+ 6 rows in set (0.000 sec)つまり、select distinctした後に連番をふればいいので、以下の様にします。
SELECT
t_vendor.vendor,
row_number() OVER (ORDER BY t_vendor.vendor) vendor_no
FROM
(
SELECT distinct prop_dsc1 AS vendor
FROM art_prop
WHERE prop_name="vendor"
) as t_vendor;
+--------+-----------+
| vendor | vendor_no |
+--------+-----------+
| ASRock | 1 |
| MSI | 2 |
+--------+-----------+
ところで、PARTITION BYですが、PARTITION BY t_vendor.vendorを入れると、これも期待通りにならないので注意が必要です。
SELECT t_vendor.vendor, row_number() OVER (PARTITION ORDER BY t_vendor.vendor) vendor_no FROM ( SELECT distinct prop_dsc1 AS vendor FROM art_prop WHERE prop_name="vendor" ) as t_vendor; +--------+-----------+ | vendor | vendor_no | +--------+-----------+ | ASRock | 1 | | MSI | 1 | +--------+-----------+MariaDB10.5.12で動作確認しました。簡単ですが今回は以上です。それでは。
コメント
コメントを投稿